Go言語の日時フォーマットがややこしい

go言語

日時指定って言語ごとに微妙に違う

似ているようで似ていないでもちょっと似ている日時のフォーマット指定。

Rails

<% time = Time.now # Thu Dec 24 00:00:00 +0900 2011 %>
<%= time.strftime('%Y年%m月%d日 %H:%M:%S') %>
→ 2011年12月24日 00:00:00

とか

Java

"yyyy/MM/dd HH:mm:ss"
→ 2011/08/31 14:53:02

とか

PHP

<?php
$date = new DateTime('2000-01-01');
echo $date->format('Y-m-d H:i:s');
?>
→ 2000-01-01 00:00:00

とか。

どれも微妙~に違っているのですが戸惑うほど違うわけでもありませんでした。

Go言語に初めて触れてみたところ面白い指定方法だったのでメモ。

Go言語の不思議な日時指定方法

Go言語の日時フォーマット指定

Go言語の既存コードに下記のコードを発見

 

jst := time.Local

fmt.Sprintf(“%s”, hogeDate.In(jst).Format(“20060102”))

 

Formatって書いてあるから"20060102"はフォーマットを指定してるんだろうけど不思議な書き方。この半端な日付は何だろう?このコード書いた人の記念日かな?

と深く考えず、時間を追加したかったのでFormat("200601021930")としてみた。

全然違う日時が入った。ここで初めてググったところ、いわゆるyyyyMMddHHmmはGo言語だとFormat("200601021504")とするらしい。これ以外の日時を入れてもフォーマットと認識されないとのこと。

フォーマットの2006年01月02日15時04分ってなに?

ググったところ下記の情報を発見。

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

引用:「Goのtimeパッケージのリファレンスタイム(2006年1月2日)は何の日?

なるほどー…

逆にややこしい気もするけどそういうものらしいので仕方がありません。

コメント