開始日期和時間格式

了解如何使用格式常量或自定義格式在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 6在Posix中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))

更多教程: