开始日期和时间格式

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

更多教程: