日: 2019年4月7日

  • go言語で時間を制御する

    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月など)に変換できるのは面白い。