※Go言語入門のindexページはこちら
こんにちは。オガリア開発チームの粂です。
今回はGoの日付操作周りについて調べたことを書こうと思います。
Goのバージョン:1.1.2
現在の日時を取得する
package main import ( "fmt" "time" ) func main() { now := time.Now() fmt.Println(now) }
現在の年、月、日、時、分、秒を取得する
package main import ( "fmt" "time" ) func main() { now := time.Now() fmt.Println(now.Year()) fmt.Println(now.Month() fmt.Println(now.Day()) fmt.Println(now.Hour()) fmt.Println(now.Minute()) fmt.Println(now.Second()) }
現在の曜日を取得する
package main import ( "fmt" "time" ) func main() { now := time.Now() fmt.Println(now.Weekday()) }
1秒後を取得する
package main import ( "fmt" "time" ) func main() { now := time.Now() fmt.Println(now.Add(time.Duration(1) * time.Second)) }
1分後を取得する
package main import ( "fmt" "time" ) func main() { now := time.Now() fmt.Println(now.Add(time.Duration(1) * time.Minute)) }
1時間後を取得する
package main import ( "fmt" "time" ) func main() { now := time.Now() fmt.Println(now.Add(time.Duration(1) * time.Hour)) }
1日後を取得する
package main import ( "fmt" "time" ) func main() { now := time.Now() fmt.Println(now.Add(time.Duration(24) * time.Hour)) }
あるいは
package main import ( "fmt" "time" ) func main() { now := time.Now() fmt.Println(now.AddDate(0, 0, 1)) }
1ヶ月後を取得する
package main import ( "fmt" "time" ) func main() { now := time.Now() fmt.Println(now.AddDate(0, 1, 0)) }
1年後を取得する
package main import ( "fmt" "time" ) func main() { now := time.Now() fmt.Println(now.AddDate(1, 0, 0)) }
先月初日/末日を取得する
初日はそのままなんですが、末日は翌月の初日を取得してそこから1日戻すというやり方。他の言語でも同じようなことしますね。
package main import ( "fmt" "time" ) func main() { now := time.Now() firstDay := time.Date(now.Year(), now.Month()-1, 1, 0, 0, 0, 0, now.Location()) lastDay := time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, now.Location()).AddDate(0, 0, -1) fmt.Println(firstDay) fmt.Println(lastDay) }
今月初日/末日を取得する
先月と同じ要領です。
package main import ( "fmt" "time" ) func main() { now := time.Now() firstDay := time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, now.Location()) lastDay := time.Date(now.Year(), now.Month()+1, 1, 0, 0, 0, 0, now.Location()).AddDate(0, 0, -1) fmt.Println(firstDay) fmt.Println(lastDay) }
来月初日/末日を取得する
しつこいですか。
package main import ( "fmt" "time" ) func main() { now := time.Now() firstDay := time.Date(now.Year(), now.Month()+1, 1, 0, 0, 0, 0, now.Location()) lastDay := time.Date(now.Year(), now.Month()+2, 1, 0, 0, 0, 0, now.Location()).AddDate(0, 0, -1) fmt.Println(firstDay) fmt.Println(lastDay) }
Time型の値が24時間以上前かどうかを確認する
24時間経過していたらとか、30日経過していたらとか、ありがちだと思いますが、Since使うといい感じに書けます。
package main import ( "fmt" "time" ) func main() { target := time.Now().AddDate(0, 0, -1) expireDate := time.Duration(24) * time.Hour fmt.Println(time.Since(target) >= expireDate) //=>true }
Time型の値が指定した期間内に含まれるかどうかを確認する
AfterとBeforeを組み合わせればいい感じに書けます。
package main import ( "fmt" "time" ) func main() { target := time.Now() tomorrow := target.AddDate(0, 0, 1) yesterday := target.AddDate(0, 0, -1) fmt.Println(target.After(tomorrow)) //=> false fmt.Println(target.After(yesterday)) //=> true fmt.Println(target.Before(tomorrow)) //=> true fmt.Println(target.Before(yesterday)) //=> false }
参考サイト
http://golang.org/pkg/time/
最後までお読みいただきありがとうございました!