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


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


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


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


5

sh + coreutils, 22 byte

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

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


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


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

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.


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!





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


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

Bisakah kita punya penjelasan?
manusia

1
@ sebenarnya manusia, terima kasih sudah mengingatkan saya. Diedit. Pada dasarnya, builtin XOmelakukan sebagian besar pekerjaan
Luis Mendo
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.