スポンサーリンク
概要
Goにおいて、時刻を30分単位で切り上げて保持したり比較したい場合の方法のメモ。
方法
time.Round関数を使用して、30分単位で四捨五入する。30-44までの値が30になってしまうので、同値の場合には30分追加することで対応する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
package main import ( "fmt" "time" ) func main() { fmt.Println("----- Round() Truncate() -----") time10 := time.Date(2022, 12, 10, 14, 00, 00, 0, time.Local) time11 := time.Date(2022, 12, 10, 14, 29, 55, 0, time.Local) time12 := time.Date(2022, 12, 10, 14, 30, 45, 0, time.Local) time13 := time.Date(2022, 12, 10, 14, 44, 45, 0, time.Local) time14 := time.Date(2022, 12, 10, 14, 45, 45, 0, time.Local) fmt.Println(time10.String() + " : " + round(time10).String()) // 2022-12-10 14:00:00 +0000 UTC : 2022-12-10 14:30:00 +0000 UTC fmt.Println(time11.String() + " : " + round(time11).String()) // 2022-12-10 14:29:55 +0000 UTC : 2022-12-10 14:30:00 +0000 UTC fmt.Println(time12.String() + " : " + round(time12).String()) // 2022-12-10 14:30:45 +0000 UTC : 2022-12-10 15:00:00 +0000 UTC fmt.Println(time13.String() + " : " + round(time13).String()) // 2022-12-10 14:44:45 +0000 UTC : 2022-12-10 15:00:00 +0000 UTC fmt.Println(time14.String() + " : " + round(time14).String()) // 2022-12-10 14:45:45 +0000 UTC : 2022-12-10 15:00:00 +0000 UTC } func round(t time.Time) time.Time { var r = t.Round(time.Minute * 30) if !r.After(t) { r = r.Add(time.Minute * 30) } return r } |