12 Stunden Zeitumrechnung

10

Herausforderung

Konvertieren und drucken Sie eine Zeit im 12-Stunden-Format. HH:MM AM/PM

Beispiele

Eingang:

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

Ausgabe:

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

Feine Punkte

  • Eine Null vor einer einstelligen Zahl ist in Ordnung , es ist auch keine Null zulässig. Folgende Beispiele sind zulässig :

    • 9:06 AM

    • 09:06 AM

  • Alle getesteten Jahre werden danach sein 999(jedes Jahr werden genau 4 Ziffern sein)

Regeln

Zoecarver
quelle
Vorgeschlagene Testfälle: 00:10:23 --> 12:10 AMund 12:10:23 --> 12:10 PM.
Arnauld
Na, bitte. Fühlen Sie sich frei zu bearbeiten, wenn Sie etwas anderes sehen, das ich ändern sollte. danke für den Vorschlag!
Zoecarver
Verwandte
Kein Baum
2
Dürfen wir annehmen, dass die Zeit in der Zeitzone angegeben ist, in der das Programm ausgeführt wird? (zB 'Fri Jun 30 2017 21:14:20 GMT-0400 (EDT)'für mich)
ETHproductions
9
ähm, der 31. Juni existiert nicht. Ist das richtig?
Eric Lagergren

Antworten:

7

JavaScript (ES6), 69 Byte

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


JavaScript (ES6), 58 55 Byte

Angenommen, Sie befinden sich in den USA.

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


JavaScript (ES6), 81 78 Byte

Die Antwort vor der Ausgabe einer führenden 0 in einstelligen Stunden wurde optional gemacht und Testfälle ohne führende 0 wurden hinzugefügt.

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

darrylyeo
quelle
1
Ich dachte über die Änderung ${m>12?'P':'A'}Mzu ${"AP"[m>12]}M, aber es funktioniert nicht ohne den Index auf eine ganze Zahl zu Gießen (wie bei |0), das es die gleiche Länge macht. Schön Golf gespielt.
Kamoroso94
Sie können ,21im Slice weglassen , um 3 Bytes zu speichern.
Rick Hitchcock
Rückgabe 00:10 Uhr für Fri Jun 30 2017 12:10:23 GMT-0700 (PDT). Sollte PM sein. Ein Wechsel m>12zu m>11sollte das Problem beheben.
Rick Hitchcock
um Ihnen 4 Bytes zu sparen:d=>(new Date(d).toLocaleString(0,{hour:'numeric',minute:'numeric',hour12:1}))
Zoecarver
In der Tat könnten Sie tatsächlich 25 Bytes mit den folgenden speichern: d=>(new Date(d).toLocaleTimeString().replace(/:\d+/,''))
speichern
6

Python 2 , 66 Bytes

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

Probieren Sie es online aus!

total menschlich
quelle
Dies schlägt jahrelang mit weniger als 4 Ziffern fehl (obwohl ich nicht sicher bin, ob es mit diesen funktionieren muss).
Notjagan
Ich denke das ist in Ordnung.
Zoecarver
@notjagan muss es nicht, heißt es in der Frage.
Fedone
@totallyhuman Whoops, sorry.
Fedone
Können Sie ändern int(s[15:18])>11zu s[15:18]>"11"?
ETHproductions
5

sh + coreutils, 22 Bytes

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

(Wenn Sekunden zulässig sind, date +%r -d"$1"reicht dies aus.)

Anders Kaseorg
quelle
beeindruckend wenige Bytes! auch gut gemacht
Zoecarver
4

JavaScript (ES6), 77 Byte

Angenommen, das Jahr hat 4 Ziffern.

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

Testfälle

Arnauld
quelle
Wie oben habe ich einen kleineren Weg gefunden, um zu erstellen und zu antworten. Fühlen Sie sich frei, meinen Code zu verwenden, ich denke nicht, dass es wirklich teuer ist, meine eigene Frage zu beantworten. d=>(new Date(d).toLocaleTimeString().replace(/:\d+/,''))
Zoecarver
@pudility Dies würde nur funktionieren, wenn Ihr Gebietsschema en-USund Ihre Zeitzone sind GMT-0700 (PDT). Zum Beispiel trifft keine dieser Annahmen auf mich zu.
Arnauld
1

V , 36 Bytes

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

Probieren Sie es online aus!

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
quelle
1

PHP, 45 Bytes

Antwort dank Manatwork verbessert

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

Erster Versuch:

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

Beispiel für die Verwendung über PHP CLI:

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

Dies ist mein erster Golfversuch.

ruckelt
quelle
Keine Notwendigkeit für Variablen $dund auf diese Weise können Sie die explizite entfernen echo: <?=(new DateTime($argv[1]))->format('h:i A');.
Manatwork
1

Gelee , 43 Bytes

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

Probieren Sie es online aus!

Das ist überflüssig zu lang ! Das heißt, Jelly saugt bei Zeitmanipulation.

EDIT: Ich bin sogar von PHP outgolfed!

Erik der Outgolfer
quelle
0

C #, 145 Bytes

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

Vollversion / Formatierte Version:

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
quelle
0

,,,, 41 Bytes

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

Erläuterung

WIP

total menschlich
quelle
0

MATL , 9 Bytes

5:24)16XO

Probieren Sie es bei MATL online aus! Oder überprüfen Sie alle Testfälle .

Erläuterung

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
quelle
Können wir eine Erklärung haben?
totalmenschlich
1
@totallyhuman Klar, danke, dass du mich daran erinnert hast. Bearbeitet. Grundsätzlich erledigt der Einbau den XOgrößten Teil der Arbeit
Luis Mendo