12 saatlik zaman dönüşümü


10

Meydan okuma

Bir saati 12 saatlik biçimde dönüştürün ve yazdırın. HH:MM AM/PM

Örnekler

Giriş:

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

Çıkışı:

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

İnce Noktalar

  • Sıfır biri önce basamaklı bir sayı tamamdır hiçbir sıfır da izin verilir. Aşağıdaki örneklerin her ikisine de izin verilir :

    • 9:06 AM

    • 09:06 AM

  • Test edilen tüm yıllar sonra olacak 999(her yıl tam 4 rakamlar olacak )

kurallar


Önerilen test örnekleri: 00:10:23 --> 12:10 AMve 12:10:23 --> 12:10 PM.
Arnauld

oraya gidiyoruz. Değiştirmem gereken başka bir şey görürseniz düzenleme yapmaktan çekinmeyin. Önerin için teşekkürler!
zoecarver


2
Programın yürütülmekte olduğu saat diliminde zaman verildiğini varsayabilir miyiz? (örneğin 'Fri Jun 30 2017 21:14:20 GMT-0400 (EDT)'benim için)
ETHproductions

9
erm, 31 Haziran mevcut değil. Bu doğru mu?
Eric Lagergren

Yanıtlar:


7

JavaScript (ES6), 69 bayt

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


JavaScript (ES6), 58 55 bayt

Amerika Birleşik Devletleri'nde olduğunuzu varsayar.

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


JavaScript (ES6), 81 78 bayt

Tek basamaklı saatlerde baştaki 0 ​​çıkmadan önce cevap isteğe bağlı hale getirildi ve baştaki 0'lar olmayan test örnekleri eklendi.

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


1
Ben değiştirmeyi düşünüyordum ${m>12?'P':'A'}Miçin ${"AP"[m>12]}M, ancak (olduğu gibi tam sayıya indeksi olmadan döküm işi değil |0aynı uzunlukta yapar). Güzel golf.
kamoroso94

,213 bayt kaydetmek için dilimi atlayabilirsiniz .
Rick Hitchcock

İçin 12:10 AM döndürür Fri Jun 30 2017 12:10:23 GMT-0700 (PDT). PM olmalıdır. Değişen m>12için m>11bunu düzeltmek gerekir.
Rick Hitchcock

4 bayt kurtarmak için:d=>(new Date(d).toLocaleString(0,{hour:'numeric',minute:'numeric',hour12:1}))
zoecarver

Aslında, aşağıdakilerle 25 bayt tasarruf edebilirsiniz:d=>(new Date(d).toLocaleTimeString().replace(/:\d+/,''))
zoecarver


5

sh + coreutils, 22 bayt

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

(Saniyelere izin verilirse, date +%r -d"$1"yeterlidir.)


etkileyici birkaç bayt! Ayrıca aferin
zoecarver

4

JavaScript (ES6), 77 bayt

Yılın 4 rakamı olduğunu varsayar.

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

Test senaryoları


Yukarıdaki gibi, oluşturmak ve cevaplamak için daha küçük bir yol buldum. Kodumu kullanmaktan çekinmeyin, gerçekten kendi soruma cevap vermek için ücret olduğunu sanmıyorum. d=>(new Date(d).toLocaleTimeString().replace(/:\d+/,''))
zoecarver

@pudility Bu, yalnızca Yerel Ayarınız en-USve saat diliminiz olduğunda çalışır GMT-0700 (PDT). Örneğin, bu varsayımların hiçbiri benim için geçerli değil.
Arnauld


1

V , 36 bayt

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

Çevrimiçi deneyin!

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 bayt

Manatwork sayesinde cevap gelişti

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

İlk girişim:

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

Php CLI üzerinden örnek kullanım:

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

Bu benim ilk golf denemem.


Değişken gerek yok $dve bu şekilde müstehcen kurtulabilirsiniz echo: <?=(new DateTime($argv[1]))->format('h:i A');.
manatwork

1

Jöle , 43 bayt

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

Çevrimiçi deneyin!

Bu gereksiz çok uzun ! Yani, Jelly zaman manipülasyonu berbat.

DÜZENLEME: PHP tarafından bile geride kaldım!





0

C #, 145 bayt

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

Tam / Biçimlendirilmiş sürüm:

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 bayt

5:24)16XO

Çevrimiçi MATL'de deneyin ! Veya tüm test senaryolarını doğrulayın .

açıklama

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

Bir açıklama yapabilir miyiz?
totallyhuman

1
@totallyhuman Elbette, hatırlattığın için teşekkürler. Düzenlenen. Temelde yerleşik XOişin çoğunu yapar
Luis Mendo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.