2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Go】time.Format() の使い方が分かりにくかった

Last updated at Posted at 2020-09-11

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パッケージはクセがあってちょっと面倒ですね :frowning2:

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?