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


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


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


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


5

sh + coreutils, 22 Bytes

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

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


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


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

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.


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





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


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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.