⌚
Goの時刻系の覚書
現在時刻
now := time.Now()
ロケーション生成
gmt, _ := time.LoadLocation("GMT")
指定時刻の生成
target := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, gmt)
計算
// 年月日系は以下
yesterday := time.Now().AddDate(0, 0, -1)
last_month := time.Now().AddDate(0, -1, 0)
next_year := time.Now().AddDate(1, 0, 0)
// 時分秒系は以下
thirty_minutes_later := time.Now().Add(time.Minute * 30)
fourty_hours_ago := time.Now().Add(time.Hour * -40)
30分後のきっかりの時間
多分上記の組み合わせ。泥臭い。
later30 := now.Add(time.Minute * 30)
target := time.Date(later30.Year(), later30.Month(), later30.Day(), later30.Hour(), later30.Minute(), 0, 0, later30.Location())
文字列から時刻への変換
よくあるYMD形式によるパースではなく、独特(というかなかなか覚えられない)。
s := "Tue, 01 Feb 2022 06:43:56 GMT"
layout := "Mon, 02 Jan 2006 15:04:05 MST"
modified_date, err := time.Parse(layout, s)
謎のフォーマットの根拠はこの辺りを参照。
01/02 03:04:05PM '06 -0700
項目 | 指定すべきもの | バリエーション例 |
---|---|---|
年 | 2006 | 2006,06 |
月 | 1 | Jan,January |
日 | 2 | 2,02 |
曜 | Mon | Mon,Monday |
時 | 15 | 15 |
分 | 4 | 4,04 |
秒 | 5 | 5,05 |
TZ | MST | MST, -0700 |
或いは、文字列のフォーマットが野良フォーマットではなく何らかの基準に準拠しているのであれば、
timeに用意されているconstを利用するのが楽。(下表はconstから抜粋)
s := "Tue, 01 Feb 2022 06:43:56 GMT"
modified_date, err := time.Parse(time.RFC1123, s)
定数名 | レイアウト |
---|---|
ANSIC | Mon Jan _2 15:04:05 2006 |
UnixDate | Mon Jan _2 15:04:05 MST 2006 |
RubyDate | Mon Jan 02 15:04:05 -0700 2006 |
RFC822 | 02 Jan 06 15:04 MST |
RFC822Z | 02 Jan 06 15:04 -0700 |
RFC850 | Monday, 02-Jan-06 15:04:05 MST |
RFC1123 | Mon, 02 Jan 2006 15:04:05 MST |
RFC1123Z | Mon, 02 Jan 2006 15:04:05 -0700 |
RFC3339 | 2006-01-02T15:04:05Z07:00 |
RFC3339Nano | 2006-01-02T15:04:05.999999999Z07:00 |
時刻の比較
gmt, _ := time.LoadLocation("GMT")
d1 := time.Date(2022, 2, 2, 22, 22, 22, 0, gmt)
d2 := time.Date(2022, 2, 2, 22, 22, 23, 0, gmt)
d3 := time.Date(2022, 2, 2, 22, 22, 24, 0, gmt)
fmt.Println(d1.Before(d2)) // true
fmt.Println(d2.Before(d2)) // false
fmt.Println(d2.Equal(d2)) // true
fmt.Println(d2.After(d2)) // false
fmt.Println(d3.After(d2)) // true
a.Before(b)
-> aはbより過去
a.Equal(b)
-> aとbは同じ
a.After(b)
-> aはbより未来
Discussion