TL; DR
time.Format()の第一引数で 年,月,日... に対応する文字列は決まっているものがある。
単位 | 文字列 |
---|---|
年 | 2006 |
月 | 01 |
日 | 02 |
時 | 03 |
分 | 04 |
秒 | 05 |
マイクロ秒 | 0700 |
つまり、年-月-日
のようにフォーマットしたいときは下記のように指定します。(このときに使う数字が重要)
go
n := time.Now() // 2009-11-10 23:00:00 +0000 UTC m=+0.000000001
f := n.Format("2006-01-02")
fmt.Print(f) // 2009-11-10
根拠はtimeパッケージのソースコードに書いてあります。(73行目〜, RFC3339が日本人的に見やすいと思います。)
https://golang.org/src/time/format.go
これを使えばフォーマットできるのか!とか思って初見では適当に下記のようにしたら訳のわからない文字列が返ってきて少しハマりました。
go
n := time.Now() // 2009-11-10 23:00:00 +0000 UTC m=+0.000000001
f := n.Format("2000-01-01")
fmt.Print(f) // 10000-11-11
ちなみに、なんで2006なんだ?と思い知人に聞いてみたところ、アメリカ式の日時の記法では
月 日 時 分 秒 年 (マイクロ秒)
となるらしく、これに順番に数字を当てはめると...
01 02 03 04 05 2006 (0700)
となるため、このような対応関係になっているそうです。
ひとこと
timeパッケージはクセがあってちょっと面倒ですね