Conversione di 12 ore


10

Sfida

Converti e stampa un orario in un formato di 12 ore. HH:MM AM/PM

Esempi

Ingresso:

  • 'Fri Jun 30 2017 21:14:20 GMT-0700 (PDT)'
  • 'Fri Jun 30 2017 00:10:23 GMT-0700 (PDT)'
  • 'Fri Jun 30 2017 12:10:23 GMT-0700 (PDT)'
  • 'Sat Jun 31 2018 8:06:20 GMT-0700 (PDT)'
  • 'Fri Jul 01 2017 01:14:20 GMT-0700 (PDT)'
  • 'Sat Apr 10 2020 09:06:20 GMT-0700 (PDT)'

ouput:

  • 9:14 PM
  • 12:10 AM
  • 12:10 PM
  • 08:06 AM
  • 1:14 AM
  • 09:06 AM

Punti fini

  • Uno zero prima di un numero di una cifra va bene , nessuno zero è consentito. I seguenti esempi sono entrambi consentiti :

    • 9:06 AM

    • 09:06 AM

  • Tutti gli anni testati saranno successivi 999(ogni anno saranno esattamente 4 cifre)

Regole


Casi di prova suggeriti: 00:10:23 --> 12:10 AMe 12:10:23 --> 12:10 PM.
Arnauld,

eccoci. Sentiti libero di modificare se vedi qualcos'altro che dovrei cambiare. grazie per il suggerimento!
Zoecarver


2
Possiamo supporre che l'ora sia indicata nel fuso orario in cui viene eseguito il programma? (es. 'Fri Jun 30 2017 21:14:20 GMT-0400 (EDT)'per me)
ETHproductions

9
il 31 giugno non esiste. È preciso?
Eric Lagergren,

Risposte:


7

JavaScript (ES6), 69 byte

d=>new Date(d).toLocaleString(0,{hour:n='numeric',minute:n,hour12:1})


JavaScript (ES6), 58 55 byte

Suppone che tu sia negli Stati Uniti.

d=>new Date(d).toLocaleTimeString().replace(/:.. /,' ')


JavaScript (ES6), 81 78 byte

La risposta prima di emettere uno 0 iniziale in ore a una cifra è stata resa facoltativa e sono stati aggiunti casi di test senza 0 iniziali.

d=>([m,s]=d.slice(16).split`:`,`0${m%12||12}:${s} ${m<12?'A':'P'}M`.slice(-8))


1
Stavo pensando di cambiare ${m>12?'P':'A'}Min ${"AP"[m>12]}M, ma non funziona senza trasmettere l'indice a un numero intero (come con |0), il che rende la stessa lunghezza. Ben giocato a golf.
kamoroso94,

È possibile omettere ,21nella sezione per salvare 3 byte.
Rick Hitchcock,

Restituisce 12:10 per Fri Jun 30 2017 12:10:23 GMT-0700 (PDT). Dovrebbe essere PM. Passare m>12a m>11dovrebbe risolverlo.
Rick Hitchcock,

per salvarti 4 byte:d=>(new Date(d).toLocaleString(0,{hour:'numeric',minute:'numeric',hour12:1}))
zoecarver

In effetti, potresti effettivamente salvare 25 byte con il seguente:d=>(new Date(d).toLocaleTimeString().replace(/:\d+/,''))
Zoecarver


5

sh + coreutils, 22 byte

date +%I:%M\ %p -d"$1"

(Se i secondi sono ammessi, allora è date +%r -d"$1"sufficiente.)


in modo impressionante pochi byte! anche ben fatto
zoecarver

4

JavaScript (ES6), 77 byte

Suppone che l'anno abbia 4 cifre.

s=>`${([,,,h,m]=s.match(/\d./g),x=h%12||12)>9?x:'0'+x}:${m} ${'AP'[h/12|0]}M`

Casi test


Come sopra, ho trovato un modo più piccolo di creare e rispondere. Sentiti libero di usare il mio codice, non penso che sia davvero giusto rispondere alla mia domanda. d=>(new Date(d).toLocaleTimeString().replace(/:\d+/,''))
Zoecarver

@pudility Funzionerebbe solo se la tua locale è en-USe il tuo fuso orario è GMT-0700 (PDT). Ad esempio, nessuna di queste ipotesi è vera per me.
Arnauld,


1

V , 36 byte

16x3wC AMÇ^0ü^1[0-2]/12WrP
ç^ä:/é0

Provalo online!

hexdump:

00000000: 3136 7833 7743 2041 4d1b c75e 30fc 5e31  16x3wC AM..^0.^1
00000010: 5b30 2d32 5d2f 3132 1857 7250 0ae7 5ee4  [0-2]/12.WrP..^.
00000020: 3a2f e930                                :/.0

1

PHP, 45 byte

Risposta migliorata grazie al lavoro manuale

<?=(new DateTime($argv[1]))->format('h:i A');

Primo tentativo:

<? $d=new DateTime($argv[1]);echo$d->format('h:i A');

Esempio di utilizzo tramite l'interfaccia della riga di comando di php:

php d.php "Sat Apr 10 2020 09:06:20 GMT-0700 (PDT)"

Questo è il mio primo tentativo di golf.


Non c'è bisogno di variabili $de in questo modo si può sbarazzarsi del esplicito echo: <?=(new DateTime($argv[1]))->format('h:i A');.
arte

1

Gelatina , 43 byte

Ḳ5ịṣ”:Ṗṁ3µV’%12‘Dµ1¦µV>11ị⁾PAµ3¦“0: M”żFṫ-7

Provalo online!

Questo è inutilmente troppo lungo ! Cioè, Jelly fa schifo al momento manipolazione.

EDIT: Sono persino superato da PHP!





0

C #, 145 byte

namespace System.Linq{s=>{var d=DateTime.Parse(string.Join(" ",s.Split(' ').Skip(1).Take(4)));return d.ToString("h:mm ")+(d.Hour>11?"PM":"AM");}}

Versione completa / formattata:

namespace System.Linq
{
    class P
    {
        static void Main()
        {
            Func<string, string> f = s =>
            {
                var d = DateTime.Parse(string.Join(" ", s.Split(' ').Skip(1).Take(4)));

                return d.ToString("h:mm ") + (d.Hour > 11 ? "PM" : "AM");
            };

            Console.WriteLine(f("Fri Jun 30 2017 21:14:20 GMT-0700 (PDT)"));
            Console.WriteLine(f("Fri Jun 30 2017 00:10:23 GMT-0700 (PDT)"));
            Console.WriteLine(f("Fri Jun 30 2017 12:10:23 GMT-0700 (PDT)"));
            Console.WriteLine(f("Fri Jul 01 2017 01:14:20 GMT-0700 (PDT)"));
            Console.WriteLine(f("Sat Apr 10 2020 09:06:20 GMT-0700 (PDT)"));

            Console.ReadLine();
        }
    }
}


0

MATL , 9 byte

5:24)16XO

Provalo su MATL online! Oppure verifica tutti i casi di test .

Spiegazione

5:24    % Push array [5 6 ... 24]
)       % Implicit input. Get characters at those positions. This
        % removes the first four characters with the day of the week
16      % Push 16
XO      % Convert to date string format 16, which is 'HH:MM PM'
        % Implicitly display

Possiamo avere una spiegazione?
totalmente umano il

1
@totallyhuman Certo, grazie per avermelo ricordato. Modificato. Fondamentalmente il builtin XOfa la maggior parte del lavoro
Luis Mendo il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.