go言語で時間を制御する

はじめに

どの言語でも時間を表示したり、プログラムに利用したいことが多々ある。

go言語でよくつかうライブラリ time について整理する。

公式ドキュメントはこちら

https://godoc.org/time

時間のフォーマットは世界中にいろいろある。

const (
    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" // RFC822 with numeric zone
    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" // RFC1123 with numeric zone
    RFC3339     = "2006-01-02T15:04:05Z07:00"
    RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00"
    Kitchen     = "3:04PM"
    // Handy time stamps.
    Stamp      = "Jan _2 15:04:05"
    StampMilli = "Jan _2 15:04:05.000"
    StampMicro = "Jan _2 15:04:05.000000"
    StampNano  = "Jan _2 15:04:05.000000000"
)

今回は我々日本人に馴染みのあるRCF3339を利用することとする

サンプルプログラム

package main

import (
	"fmt"
	"time"
)

func main() {
	//現在時間を取得する
	t := time.Now()
	fmt.Println(t)

	// RCF3339 formatに変換する
	fmt.Println(t.Format(time.RFC3339))

	// 年月日を取得する
	fmt.Println(t.Year(), t.Month(), t.Day())

	// 月を数字(April -> 4 に変換する)
	fmt.Println(t.Year(), int(t.Month()), t.Day())

	// 時分秒を表示
	fmt.Println(t.Hour(), t.Minute(), t.Second())
}

出力結果

2019-04-06 11:13:36.125176 +0900 JST m=+0.000473714
2019-04-06T11:13:36+09:00
2019 April 6
2019 4 6
11 13 36

“` int(t.Month()) “` とすることで数字(4月など)に変換できるのは面白い。