12時間の時間変換


10

チャレンジ

12時間形式で時刻を変換して印刷します。 HH:MM AM/PM

例

入力:

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

出力:

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

細かい点

  • 1桁の数字の前のゼロは問題ありません。ゼロも使用できません。次の例はどちらも使用できます。

    • 9:06 AM

    • 09:06 AM

  • すべてのテストされた年は後になります999(各年は正確に 4数字になります)

ルール


推奨されるテストケース:00:10:23 --> 12:10 AMおよび12:10:23 --> 12:10 PM。
— Arnauld 2017

行きます。他に変更が必要なものがあれば、自由に編集してください。提案をありがとう!
— zoecarver 2017


2
プログラムが実行されているタイムゾーンで時刻が与えられていると想定できますか?(例:'Fri Jun 30 2017 21:14:20 GMT-0400 (EDT)'私の場合)
— ETHproductions 2017

9
えーと、6月31日は存在しません。それは正確ですか?
— エリックラガーグレン2017

回答:


7

JavaScript(ES6)、69バイト

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


JavaScript(ES6)、58 55バイト

あなたが米国にいると仮定します。

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


JavaScript(ES6)、81 78バイト

1桁の時間で先行0を出力する前の回答はオプションになり、先行0のないテストケースが追加されました。

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


1
に変更${m>12?'P':'A'}Mすることを考え${"AP"[m>12]}Mていましたが、(のように|0)インデックスを整数にキャストしないと機能しません。うまくゴルフをした。
— kamoroso94 2017

,21スライスを省略して3バイトを節約できます。
— リックヒッチコック

の午前12時10分を返しますFri Jun 30 2017 12:10:23 GMT-0700 (PDT)。PMである必要があります。に変更m>12するm>11と修正されます。
— リックヒッチコック

4バイト節約するには:d=>(new Date(d).toLocaleString(0,{hour:'numeric',minute:'numeric',hour12:1}))
— zoecarver 2017

実際には、あなたは可能性実際、次の25バイトの保存:d=>(new Date(d).toLocaleTimeString().replace(/:\d+/,''))
— zoecarver

6

Python 2、66バイト

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

オンラインでお試しください!


これは、4桁未満の数年間は失敗します(ただし、これらの桁で機能する必要があるかどうかはわかりません)。
— notjagan 2017

大丈夫だと思います。
— zoecarver 2017

@notjagan必要はありません。質問でそう言っています。
— Fedone 2017

@totallyhumanおっと、ごめんなさい。
— Fedone 2017

あなたは変更することができますint(s[15:18])>11にs[15:18]>"11"?
— ETHproductions 2017


4

JavaScript(ES6)、77バイト

年は4桁であると仮定します。

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

テストケース


上記のように、私は作成して答えるもっと小さな方法を見つけました。私のコードを自由に使用してください。自分の質問に答えるのは本当にいいことではないと思います。d=>(new Date(d).toLocaleTimeString().replace(/:\d+/,''))
— zoecarver 2017

@pudilityこれは、ロケールがen-USでタイムゾーンがの場合にのみ機能しますGMT-0700 (PDT)。たとえば、これらの仮定はどれも私には当てはまりません。
— Arnauld 2017



1

PHP、45バイト

manatworkのおかげで回答が改善されました

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

最初の試み:

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

PHP CLIによる使用例:

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

初めてのゴルフ体験です。


変数は必要ありません。$dそのため、明示的なecho:を取り除くことができます<?=(new DateTime($argv[1]))->format('h:i A');。
— manatwork 2017





0

C#、145バイト

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

フル/フォーマット済みバージョン:

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バイト

5:24)16XO

MATLオンラインでお試しください!または、すべてのテストケースを確認します。

説明

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

説明をいただけますか?
— 完全に人間的な2017

1
@totallyhuman確かに、思い出させてくれてありがとう。編集。基本的にビルトインXOがほとんどの作業を行います
— Luis Mendo 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.