12-godzinna konwersja czasu

10

Wyzwanie

Konwertuj i drukuj czas w formacie 12-godzinnym. HH:MM AM/PM

Przykłady

Wejście:

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

Drobne punkty

  • Zero przed liczbą jednocyfrową jest w porządku , zero nie jest również dozwolone. Dozwolone są następujące przykłady :

    • 9:06 AM

    • 09:06 AM

  • Wszystkie testowane lata będą później 999(każdy rok będzie dokładnie 4 cyframi)

Zasady

zoecarver
źródło
Sugerowane przypadki testowe: 00:10:23 --> 12:10 AMi 12:10:23 --> 12:10 PM.
Arnauld
No to jedziemy. Edytuj, jeśli zobaczysz coś, co powinienem zmienić. dzieki za sugestie!
zoecarver
Powiązane
To nie drzewo
2
Czy możemy założyć, że czas jest podany w strefie czasowej, w której program jest uruchamiany? (np. 'Fri Jun 30 2017 21:14:20 GMT-0400 (EDT)'dla mnie)
ETHprodukcje
9
erm, 31 czerwca nie istnieje. Czy to jest dokładne?
Eric Lagergren,

Odpowiedzi:

7

JavaScript (ES6), 69 bajtów

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


JavaScript (ES6), 58 55 bajtów

Zakłada się, że jesteś w Stanach Zjednoczonych.

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


JavaScript (ES6), 81 78 bajtów

Odpowiedź przed wyprowadzeniem wiodącego 0 w jednocyfrowych godzinach stała się opcjonalna i dodano przypadki testowe bez wiodących zer.

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

darrylyeo
źródło
1
Myślałem o zmianie ${m>12?'P':'A'}Mna ${"AP"[m>12]}M, ale to nie działa bez rzutowania indeksu na liczbę całkowitą (jak z |0), co czyni go tą samą długością. Ładnie gra w golfa.
kamoroso94
Możesz pominąć ,21plasterek, aby zapisać 3 bajty.
Rick Hitchcock
Zwraca 12:10 dla Fri Jun 30 2017 12:10:23 GMT-0700 (PDT). Powinien być PM. Zmiana m>12na m>11powinna to naprawić.
Rick Hitchcock,
aby zaoszczędzić 4 bajty:d=>(new Date(d).toLocaleString(0,{hour:'numeric',minute:'numeric',hour12:1}))
zoecarver
W rzeczywistości można zaoszczędzić 25 bajtów, wykonując następujące czynności:d=>(new Date(d).toLocaleTimeString().replace(/:\d+/,''))
zoecarver
6

Python 2 , 66 bajtów

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

Wypróbuj online!

całkowicie ludzki
źródło
Nie udaje się to przez lata, które mają mniej niż 4 cyfry (chociaż nie jestem pewien, czy musi z nimi współpracować).
notjagan
Myślę, że to w porządku.
zoecarver
@notjagan nie musi, mówi tak w pytaniu.
Fedone
@ totalniehuman Ups, przepraszam.
Fedone
Czy możesz się zmienić int(s[15:18])>11na s[15:18]>"11"?
ETHprodukcje
5

sh + coreutils, 22 bajty

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

(Jeśli sekundy są dozwolone, to date +%r -d"$1"wystarczy.)

Anders Kaseorg
źródło
imponująco kilka bajtów! również dobrze zrobione
zoecarver
4

JavaScript (ES6), 77 bajtów

Zakłada, że ​​rok ma 4 cyfry.

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

Przypadki testowe

Arnauld
źródło
Tak jak powyżej, znalazłem mniejszy sposób na tworzenie i udzielanie odpowiedzi. Nie krępuj się użyć mojego kodu, nie sądzę, że odpowiedź na moje pytanie jest naprawdę opłacalna. d=>(new Date(d).toLocaleTimeString().replace(/:\d+/,''))
zoecarver
@pudility Działa to tylko wtedy, gdy masz ustawienia regionalne en-USi strefę czasową GMT-0700 (PDT). Na przykład żadne z tych założeń nie jest dla mnie prawdziwe.
Arnauld
1

V , 36 bajtów

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

Wypróbuj 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
James
źródło
1

PHP, 45 bajtów

Poprawiona odpowiedź dzięki manatwork

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

Pierwsze podejscie:

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

Przykładowe użycie za pomocą interfejsu php CLI:

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

To moja pierwsza gra w golfa.

jankes
źródło
Nie potrzeba zmiennej $di ten sposób można pozbyć się wyraźne echo: <?=(new DateTime($argv[1]))->format('h:i A');.
manatwork
1

Galaretka , 43 bajty

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

Wypróbuj online!

To zbyteczne, zbyt długie ! Oznacza to, że galaretka ssie manipulację w czasie.

EDYCJA: Jestem nawet obezwładniony przez PHP!

Erik the Outgolfer
źródło
0

05AB1E , 39 bajtów

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

Wypróbuj online!

Erik the Outgolfer
źródło
0

C #, 145 bajtów

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

Wersja pełna / sformatowana:

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
źródło
0

,,, 41 bajtów

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

Wyjaśnienie

WIP

całkowicie ludzki
źródło
0

MATL , 9 bajtów

5:24)16XO

Wypróbuj w MATL online! Lub sprawdź wszystkie przypadki testowe .

Wyjaśnienie

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
źródło
Czy możemy uzyskać wyjaśnienie?
całkowicieludzki
1
@ totalniehuman Pewnie, dziękuję za przypomnienie. Edytowane. Zasadniczo wbudowane XOwykonuje większość pracy
Luis Mendo