Goで時刻を取り扱う場合
time型を取得する
time.Time型
の変数を取得する方法。
現在時刻から取得する
fmt.Println(time.Now())
// Output:
// 2009-11-10 23:00:00 +0000 UTC
日付から取得する
fmt.Println(time.Date(2014, time.December, 31, 12, 13, 24, 0, time.UTC))
// Output:
// 2014-12-31 12:13:24 +0000 UTC
月はMonthで定義されている。
また、引数の最後のlocationはtime.LoadLocation()
などで取得出来る。
loc, _ := time.LoadLocation("Asia/Tokyo")
fmt.Println(time.Date(2014, 12, 31, 8, 4, 18, 0, loc))
// Output:
// 2014-12-31 08:04:18 +0900 JST
文字列から取得する
t, _ := time.Parse("2006-01-02", "2014-12-31")
fmt.Println(t)
// Output:
// 2014-12-31 00:00:00 +0000 UTC
time.Parse()
の第一引数は、Mon Jan 2 15:04:05 -0700 MST 2006
の中から選ぶ。
t, _ := time.Parse("2006-01-02 15:04:05 MST", "2014-12-31 12:31:24 JST")
fmt.Println(t)
// Output:
// 2014-12-31 12:31:24 +0900 JST
Unix TimeStampから変換
fmt.Println(time.Unix(1419933529, 0))
// Output:
// 2014-12-30 09:58:49 +0000 UTC
第2引数でナノ秒を指定できる。
時刻の編集
時刻の操作や差分を確認する場合、Duration型を取り扱うことになる。中身はint64。
type Duration int64
明示的にDuration型を使うことによって、時刻操作していることをわかりやすくできる。
fmt.Println(reflect.TypeOf(1)) // int
fmt.Println(reflect.TypeOf(1 * time.Second)) // time.Duration
fmt.Println(reflect.TypeOf(1 * time.Hour)) // time.Duration
○○後の時刻を取得する
fmt.Println(t) // 2014-12-20 00:00:00 +0900 JST
t2 := t.Add(1 * time.Minute) // 1分後
fmt.Println(t2) // 2014-12-20 00:01:00 +0900 JST
t3 := t.Add(1 * time.Hour) // 1時間後
fmt.Println(t3) // 2014-12-20 01:00:00 +0900 JST
t4 := t.Add(24 * time.Hour) // 1日後 (time.Dayは標準には無い)
fmt.Println(t4) // 2014-12-21 00:00:00 +0900 JST
1日後の場合はtime.AddDate()
fmt.Println(t) // 2014-12-20 00:00:00 +0900 JST
t2 := t.AddDate(0, 0, 1) // 1日後
fmt.Println(t2) // 2014-12-21 00:00:00 +0900 JST
t3 := t.AddDate(0, 1, 0) // 1ヶ月後
fmt.Println(t3) // 2015-01-20 00:00:00 +0900 JST
t4 := t.AddDate(1, 0, 0) // 1年後
fmt.Println(t4) // 2015-12-20 00:00:00 +0900 JST
○○前の時刻を取得する
time.Add()
に-を入れられる
fmt.Println(t) // 2014-12-20 00:00:00 +0900 JST
t2 := t.Add(-time.Minute) // 1分前
fmt.Println(t2) // 2014-12-19 23:59:00 +0900 JST
t3 := t.Add(-time.Hour) // 1時間前
fmt.Println(t3) // 2014-12-19 23:00:00 +0900 JST
t4 := t.Add(-24 * time.Hour) // 1日前
fmt.Println(t4) // 2014-12-19 00:00:00 +0900 JST
time.AddDate()
でマイナスを入れれば過去になる
fmt.Println(t) // 2014-12-20 00:00:00 +0900 JST
t2 := t.AddDate(0, 0, -1) // 1日前
fmt.Println(t2) // 2014-12-19 00:00:00 +0900 JST
t3 := t.AddDate(0, -1, 0) // 1ヶ月前
fmt.Println(t3) // 2014-11-20 00:00:00 +0900 JST
t4 := t.AddDate(-1, 0, 0) // 1年前
fmt.Println(t4) // 2013-12-20 00:00:00 +0900 JST
2つの時刻を比較する
t1 := time.Date(2014, 12, 20, 12, 0, 0, 0, loc)
fmt.Println(t1) // 2014-12-20 12:00:00 +0900 JST
t2 := time.Date(2014, 12, 20, 0, 0, 0, 0, loc)
fmt.Println(t2) // 2014-12-20 00:00:00 +0900 JST
fmt.Println(t1.Sub(t2)) // 12h0m0s
現在時刻からどれだけ前か調べる
loc, _ := time.LoadLocation("Asia/Tokyo")
t1 := time.Date(2009, 11, 8, 8, 0, 0, 0, loc)
d := time.Since(t1)
fmt.Println(d) // 72h0m0s (Go Playgroundで実行した場合)
time.Since(t)
はtime.Now().Sub(t)
の省略形。