Yabu.log

ITなどの雑記

Goの時間フォーマットは他の言語とかなり違っている

多くのプログラミング言語には時間を表示、保存するときに文字型に変換するためのフォーマットが用意されています

例えばJavaではこんな感じでyやMを使って日付フォーマットを指定します。大方他の言語でもこのような方式になっていると思います

 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
 Date now = new Date(System.currentTimeMillis());
        
String nowStr = format.format(now);
System.out.println(nowStr);
//出力:2018-10-15 13:07:24.872

Goだとどうでしょうか。こんな感じに指定します。

now := time.Now()
nowStr := now.Format("2006-01-02 15:04:05.000")
//出力結果:2018-10-15 22:14:57.1516

あれ?なんで時刻の値を与えているんだ?と最初戸惑いましたが、Goでは2006年1月2日の15時4分という時間をサンプルとして与えてフォーマットとしています。

意味 Java Golang
M 1
d 2
時間 H 3
m 3
s 5
y 06(2006)

なおこの時刻は何か特別な日付ではなく、作者が自然と考えるフォーマットで書いたときに1,2,3...と並ぶように作ったようです。

これはアメリカ式の時刻の順番なのだ。"1月2日午後3時4分5秒2006年"(つまり「自然な順番」で1, 2, 3, 4, 5, 6)を指しているのである。

qiita.com