日付と時刻のフォーマットに移動

フォーマット定数またはカスタムフォーマットを使用して、Goで日付をフォーマットする方法を学びます

Goでは、現在の時刻は次を使用して決定できますtime.Now()、提供timeパッケージ

t := time.Now()

これにより、システムの現地時間が印刷されます。代わりにUTCが必要ですか?追加.UTC()

時間は、を使用してフォーマットできます。time.Format()方法:

t := time.Now().UTC()

タイムスタンプが必要ですか?

t := time.Now().Unix()

カスタムフォーマットを使用する

カスタムフォーマットを使用したフォーマットの例は次のとおりです。

fmt.Println(t.Format("2006-01-02 15:04:05"))

それ2006-01-02 15:04:05文字列が変に見えますね。今は2006年じゃない!ただし、印刷されます(執筆時点)2017-01-16 12:53:51

Goを初めて使用する場合は、次のように聞こえます。非常に奇妙な。

説明は次のとおりです。Goの時間フォーマットは独特で、他の言語で行うものとは異なります。 Goは、従来の形式で日付を印刷する代わりに、参照日を使用します20060102150405これは無意味に見えますが、実際には理由があります。1 2 3 4 5 6Posixでdateコマンド:

Mon Jan 2 15:04:05 -0700 MST 2006
0   1   2  3  4  5              6

真ん中のタイムゾーンは7(なぜ彼らが選ばなかったのかよくわかりませんMon Jan 2 03:04:05 -0600 MST 2007、 ところで)

興味深い歴史的参照:https://github.com/golang/go/issues/444

フォーマット定数を使用する

Goはで提供します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"
)

次のように使用できます。

t := time.Now()
fmt.Println(t.Format(time.ANSIC))

その他のチュートリアル: