Conversion de temps de 12 heures

10

Défi

Convertissez et imprimez une heure au format 12 heures. HH:MM AM/PM

Exemples

Contribution:

  • '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)'

Sortie:

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

Fine Points

  • Un zéro avant un nombre à un chiffre est correct , aucun zéro n'est également autorisé. Les exemples suivants sont tous deux autorisés :

    • 9:06 AM

    • 09:06 AM

  • Toutes les années testées seront après 999(chaque année sera exactement des 4 chiffres)

Règles

Zoecarver
la source
Cas de test suggérés: 00:10:23 --> 12:10 AMet 12:10:23 --> 12:10 PM.
Arnauld
nous y voilà. N'hésitez pas à modifier si vous voyez autre chose que je devrais changer. Merci pour la suggestion!
Zoecarver
Connexes
Pas un arbre
2
Pouvons-nous supposer que l'heure est indiquée dans le fuseau horaire dans lequel le programme est exécuté? (par exemple 'Fri Jun 30 2017 21:14:20 GMT-0400 (EDT)'pour moi)
ETHproductions
9
euh, le 31 juin n'existe pas. Est-ce exact?
Eric Lagergren

Réponses:

7

JavaScript (ES6), 69 octets

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


JavaScript (ES6), 58 55 octets

Suppose que vous êtes aux États-Unis.

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


JavaScript (ES6), 81 78 octets

La réponse avant d'émettre un 0 de tête en heures à un chiffre a été rendue facultative et des cas de test sans 0 de tête ont été ajoutés.

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

darrylyeo
la source
1
Je pensais à changer ${m>12?'P':'A'}Mpour ${"AP"[m>12]}M, mais cela ne fonctionne pas sans convertir l'index en un entier (comme avec |0), ce qui lui donne la même longueur. Joliment joué au golf.
kamoroso94
Vous pouvez omettre ,21dans la tranche pour enregistrer 3 octets.
Rick Hitchcock
Renvoie 00h10 pour Fri Jun 30 2017 12:10:23 GMT-0700 (PDT). Devrait être PM. Changer m>12pour m>11devrait le réparer.
Rick Hitchcock
pour vous faire économiser 4 octets:d=>(new Date(d).toLocaleString(0,{hour:'numeric',minute:'numeric',hour12:1}))
zoecarver
En fait, vous pourriez réellement économiser 25 octets avec les éléments suivants:d=>(new Date(d).toLocaleTimeString().replace(/:\d+/,''))
zoecarver
6

Python 2 , 66 octets

lambda s:`int(s[15:18])%12`+s[18:21]+'  APMM'[int(s[15:18])>11::2]

Essayez-le en ligne!

totalement humain
la source
Cela échoue pendant des années qui ont moins de 4 chiffres (bien que je ne sais pas si cela doit fonctionner avec ceux-ci).
notjagan
Je pense que ça va.
Zoecarver
@notjagan ce n'est pas nécessaire, comme le dit la question.
Fedone
@totallyhuman Oups, désolé.
Fedone
Pouvez-vous changer int(s[15:18])>11pour s[15:18]>"11"?
ETHproductions
5

sh + coreutils, 22 octets

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

(Si les secondes sont autorisées, cela date +%r -d"$1"suffit.)

Anders Kaseorg
la source
très peu d'octets! également bien fait
zoecarver
4

JavaScript (ES6), 77 octets

Suppose que l'année comporte 4 chiffres.

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

Cas de test

Arnauld
la source
Comme ci-dessus, j'ai trouvé un moyen plus petit de créer et de répondre. N'hésitez pas à utiliser mon code, je ne pense pas que ce soit vraiment le prix de répondre à ma propre question. d=>(new Date(d).toLocaleTimeString().replace(/:\d+/,''))
Zoecarver
@pudility Cela ne fonctionnerait que si votre Locale est en-USet votre fuseau horaire est GMT-0700 (PDT). Par exemple, aucune de ces hypothèses n'est vraie pour moi.
Arnauld
1

V , 36 octets

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

Essayez-le en ligne!

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
James
la source
1

PHP, 45 octets

Réponse améliorée grâce au manatwork

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

Premier essai:

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

Exemple d'utilisation via php CLI:

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

Ceci est mon premier essai de golf.

jankes
la source
Pas besoin de variables $det de cette façon vous pouvez vous débarrasser de l'explicite echo: <?=(new DateTime($argv[1]))->format('h:i A');.
manatwork
1

Gelée , 43 octets

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

Essayez-le en ligne!

C'est superflu trop long ! Autrement dit, Jelly suce à la manipulation du temps.

EDIT: je suis même dépassé par PHP!

Erik le Outgolfer
la source
0

05AB1E , 39 octets

#4è':¡¨`sD11›„APès<12%>0ìR2£R)Á… :M‚øJJ

Essayez-le en ligne!

Erik le Outgolfer
la source
0

C #, 145 octets

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");}}

Version complète / formatée:

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();
        }
    }
}
TheLethalCoder
la source
0

,,,, 41 octets

::18⊢3⊣⇆15⊢3⊣i11>"  APMM"⇆⊢2⟛↔15⊢3⊣i12%s#

Explication

WIP

totalement humain
la source
0

MATL , 9 octets

5:24)16XO

Essayez-le sur MATL en ligne! Ou vérifiez tous les cas de test .

Explication

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
Luis Mendo
la source
Pouvons-nous avoir une explication?
2017 totalement humain
1
@totallyhuman Bien sûr, merci de me le rappeler. Édité. Fondamentalement, le builtin XOfait la plupart du travail
Luis Mendo