Konversi waktu 12 jam

10

Tantangan

Konversikan dan cetak waktu dalam format 12 jam. HH:MM AM/PM

Contohnya

Memasukkan:

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

Poin Baik

  • Angka nol sebelum angka satu digit tidak apa-apa , tidak ada nol juga diperbolehkan. Contoh berikut diperbolehkan :

    • 9:06 AM

    • 09:06 AM

  • Semua tahun yang diuji akan setelah 999(setiap tahun akan persis 4 digit)

Aturan

zoecarver
sumber
Kasus uji yang disarankan: 00:10:23 --> 12:10 AMdan 12:10:23 --> 12:10 PM.
Arnauld
ini dia. Silakan mengedit jika Anda melihat hal lain yang harus saya ubah. Terima kasih untuk sarannya!
zoecarver
Terkait
Bukan pohon
2
Bolehkah kita berasumsi bahwa waktu diberikan dalam zona waktu program sedang dijalankan? (mis. 'Fri Jun 30 2017 21:14:20 GMT-0400 (EDT)'untuk saya)
ETHproduksi
9
erm, 31 Juni tidak ada. Apakah itu akurat?
Eric Lagergren

Jawaban:

7

JavaScript (ES6), 69 byte

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


JavaScript (ES6), 58 55 byte

Asumsikan Anda berada di Amerika Serikat.

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


JavaScript (ES6), 81 78 byte

Jawaban sebelum mengeluarkan 0 di depan dalam satu digit jam dibuat opsional dan uji kasus tanpa 0 di depan ditambahkan.

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

Darrylyeo
sumber
1
Saya sedang berpikir tentang mengubah ${m>12?'P':'A'}Muntuk ${"AP"[m>12]}M, tetapi tidak bekerja tanpa casting indeks ke integer (seperti dengan |0), yang membuatnya panjang yang sama. Bagus bermain golf.
kamoroso94
Anda dapat menghilangkan ,21di slice untuk menghemat 3 byte.
Rick Hitchcock
Mengembalikan 12:10 untuk Fri Jun 30 2017 12:10:23 GMT-0700 (PDT). Seharusnya PM. Mengubah m>12ke m>11harus memperbaikinya.
Rick Hitchcock
untuk menghemat 4 byte:d=>(new Date(d).toLocaleString(0,{hour:'numeric',minute:'numeric',hour12:1}))
zoecarver
Bahkan, Anda sebenarnya bisa menghemat 25 byte dengan yang berikut:d=>(new Date(d).toLocaleTimeString().replace(/:\d+/,''))
zoecarver
6

Python 2 , 66 byte

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

Cobalah online!

benar-benar manusiawi
sumber
Ini gagal selama bertahun-tahun yang memiliki kurang dari 4 digit (walaupun saya tidak yakin apakah harus bekerja dengan itu).
notjagan
Saya pikir itu baik-baik saja.
zoecarver
@ notjagan tidak harus, katanya begitu dalam pertanyaan.
Fedone
@totallyhuman Whoops, maaf.
Fedone
Anda dapat mengubah int(s[15:18])>11ke s[15:18]>"11"?
ETHproduk
5

sh + coreutils, 22 byte

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

(Jika detik diizinkan, date +%r -d"$1"cukuplah.)

Anders Kaseorg
sumber
byte beberapa mengesankan! juga dilakukan dengan baik
zoecarver
4

JavaScript (ES6), 77 byte

Diasumsikan bahwa tahun memiliki 4 digit.

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

Uji kasus

Arnauld
sumber
Seperti di atas, saya telah menemukan cara yang lebih kecil untuk membuat dan menjawab. Jangan ragu untuk menggunakan kode saya, saya tidak berpikir itu benar-benar tarif untuk menjawab pertanyaan saya sendiri. d=>(new Date(d).toLocaleTimeString().replace(/:\d+/,''))
zoecarver
@pudility Ini hanya akan berfungsi jika Lokal en-USAnda dan zona waktu Anda GMT-0700 (PDT). Sebagai contoh, tidak ada asumsi ini yang benar bagi saya.
Arnauld
1

V , 36 byte

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

Cobalah 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
sumber
1

PHP, 45 byte

Jawaban ditingkatkan berkat manatwork

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

Percobaan pertama:

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

Contoh penggunaan melalui php CLI:

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

Ini adalah percobaan golf pertama saya.

jankes
sumber
Tidak perlu untuk variabel $ddan dengan cara itu Anda bisa menyingkirkan eksplisit echo: <?=(new DateTime($argv[1]))->format('h:i A');.
manatwork
1

Jelly , 43 byte

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

Cobalah online!

Ini terlalu lama ! Yaitu, Jelly mengisap manipulasi waktu.

EDIT: Saya bahkan kalah oleh PHP!

Erik the Outgolfer
sumber
0

05AB1E , 39 byte

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

Cobalah online!

Erik the Outgolfer
sumber
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");}}

Versi Lengkap / Terformat:

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

,,,, 41 byte

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

Penjelasan

WIP

benar-benar manusiawi
sumber
0

MATL , 9 byte

5:24)16XO

Cobalah di MATL online! Atau verifikasi semua kasus uji .

Penjelasan

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
sumber
Bisakah kita punya penjelasan?
manusia
1
@ sebenarnya manusia, terima kasih sudah mengingatkan saya. Diedit. Pada dasarnya, builtin XOmelakukan sebagian besar pekerjaan
Luis Mendo