まとめ
-
time.Round(time.Second)
を使うと、時刻は四捨五入的に処理される(真ん中で切り分ける) -
time.Format("2006-01-02 15:04:05")
を使うと、秒未満は切り捨てられる
場面
SQLiteを使っていて、秒単位の時刻を記録していた。その際に想定外の値のズレが発生したため、調査していた。上記の仕様を確認した。
コード
a := time.Date(2000, 1, 1, 1, 1, 1, 300_000_000, time.UTC)
b := time.Date(2000, 1, 1, 1, 1, 1, 700_000_000, time.UTC)
fmt.Printf("round a %v\n", a.Round(time.Second))//round a 2000-01-01 01:01:01 +0000 UTC
fmt.Printf("round b %v\n", b.Round(time.Second))//round b 2000-01-01 01:01:02 +0000 UTC
fmt.Printf("format a %v\n", a.Format("2006-01-02 15:04:05")) //format a 2000-01-01 01:01:01
fmt.Printf("format b %v\n", b.Format("2006-01-02 15:04:05")) //format b 2000-01-01 01:01:01