時間の取り扱い方

Page content

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
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
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)の省略形。