golangの学習(time)
日時に関する情報を制御する
timeパッケージを使用する
参考
https://golang.org/pkg/time/#Now
http://ashitani.jp/golangtips/tips_time.html
http://tdoc.info/blog/2013/04/10/go_time.html
現在日時を取得する
sample
package main import ( "fmt" "time" ) func main(){ _now := time.Now() fmt.Println(_now) }
↓
$ go run time1.go 2016-01-19 22:46:07.181469119 +0900 JST $
日時を任意のフォーマットで表示する
https://golang.org/src/time/format.go
※フォーマットの指定値がややこしいので気をつけないといけない
sample
package main import ( "fmt" "time" ) func main(){ // 現在日時を取得 _now := time.Now() // format const YYYYMMDDHHMISS1 = "2006/01/02 15:04:05" const YYYYMMDDHHMISS2 = "06-1-2 3:4:5" fmt.Println(_now.Format(YYYYMMDDHHMISS1)) fmt.Println(_now.Format(YYYYMMDDHHMISS2)) fmt.Println(_now.Format(time.RFC3339)) }
↓
$ go run time2.go 2016/01/19 22:56:21 16-1-19 10:56:21 2016-01-19T22:56:21+09:00 $
Unixタイムスタンプの秒数を取得
ちょっと意味は違うかも…
sanmple
package main import ( "fmt" "time" ) func main(){ _now := time.Now() fmt.Println(_now.Unix()) fmt.Println(_now.UnixNano()) }
↓
$ go run time3.go 1453212000 1453212000553662868 $
日付加算
日数、月数、年数を指定して加算、減算を行う
sample
package main import ( "fmt" "time" ) func main(){ // 現在の日時を取得 _now := time.Now() fmt.Println(_now) fmt.Println("") // 日付計算 fmt.Println(_now.AddDate(0, 0, 10).Format(time.RFC3339)) fmt.Println(_now.AddDate(0, 2, 0).Format(time.RFC3339)) fmt.Println(_now.AddDate(5, 0, 0).Format(time.RFC3339)) fmt.Println("") fmt.Println(_now.AddDate(0, 0, -10).Format(time.RFC3339)) fmt.Println(_now.AddDate(0, -2, 0).Format(time.RFC3339)) fmt.Println(_now.AddDate(-5, 0, 0).Format(time.RFC3339)) }
↓
$ go run time5.go 2016-01-19 23:06:58.719504358 +0900 JST 2016-01-29T23:06:58+09:00 2016-03-19T23:06:58+09:00 2021-01-19T23:06:58+09:00 2016-01-09T23:06:58+09:00 2015-11-19T23:06:58+09:00 2011-01-19T23:06:58+09:00 $
時間加算
時間を指定して加算、減算を行う
sample
package main import ( "fmt" "time" ) func main(){ // 現在の日時を取得 _now := time.Now() fmt.Println(_now) fmt.Println("") // 日付計算 fmt.Println(_now.Add(time.Duration(25) * time.Second).Format(time.RFC3339)) fmt.Println(_now.Add(time.Duration(12) * time.Minute).Format(time.RFC3339)) fmt.Println(_now.Add(time.Duration(05) * time.Hour).Format(time.RFC3339)) fmt.Println("") fmt.Println(_now.Add(time.Duration(-25) * time.Second).Format(time.RFC3339)) fmt.Println(_now.Add(time.Duration(-12) * time.Minute).Format(time.RFC3339)) fmt.Println(_now.Add(time.Duration(-05) * time.Hour).Format(time.RFC3339)) }
↓
$ go run time6.go 2016-01-19 23:13:56.686245405 +0900 JST 2016-01-19T23:14:21+09:00 2016-01-19T23:25:56+09:00 2016-01-20T04:13:56+09:00 2016-01-19T23:13:31+09:00 2016-01-19T23:01:56+09:00 2016-01-19T18:13:56+09:00 $
文字列を任意のレイアウトより日付に変換
sample
package main import ( "fmt" "time" ) func main(){ _date, _err := time.Parse("2006-01-02 15:04:05", "2001-10-23 15:54:20") if _err != nil { panic(_err) } fmt.Println(_date) }
↓
$ go run time7.go 2001-10-23 15:54:20 +0000 UTC $
2つの日時より差を取得する
sample
package main import ( "fmt" "time" ) func main(){ // 2つの日時を設定 _date1, _ := time.Parse("2006-01-02 15:04:05", "2001-10-23 15:54:20") _date2, _ := time.Parse("2006-01-02 15:04:05", "2002-10-23 15:54:20") // 差を取得する _d := _date2.Sub(_date1) // 差を出力する fmt.Println(_d) }
↓
$ go run time8.go 8760h0m0s $
まあ、こんな感じ
所感
使いそうなものをとりあえず、調べてみた。
日付のフォーマットでちょっとつまづきそうだけど基本は抑えた感じ…多分
基本、手続き型言語の仕事が多すぎた分、慣れるのがちょっと大変かも