In Go, the current time can be determined using time.Now()
, provided by the time
package.
在Go中,可以使用time
package提供的time.Now()
确定当前时间。
t := time.Now()
This will print the system local time. Want UTC instead? append .UTC()
:
这将打印系统本地时间。 需要UTC吗? 附加.UTC()
:
The time can be formatted using the time.Format()
method:
可以使用time.Format()
方法格式化时间:
t := time.Now().UTC()
Want the timestamp?
需要时间戳吗?
t := time.Now().Unix()
使用自定义格式 (Use a custom format)
An example of formatting with a custom format is:
使用自定义格式进行格式化的示例如下:
fmt.Println(t.Format("2006-01-02 15:04:05"))
That 2006-01-02 15:04:05
string looks strange, isn’t it? It’s not like it’s 2006 now! But it will print (at the time of writing) 2017-01-16 12:53:51
那2006-01-02 15:04:05
字符串看起来很奇怪,不是吗? 现在不像是2006年! 但是它将打印(在撰写本文时) 2017-01-16 12:53:51
If you’re new to Go, this will sound very strange.
如果您不熟悉Go,这听起来很奇怪。
Here’s the explanation: Go’s time formatting is unique and different than what you would do in other languages. Instead of having a conventional format to print the date, Go uses the reference date 20060102150405
which seems meaningless but actually has a reason, as it’s 1 2 3 4 5 6
in the Posix date
command:
解释如下:Go的时间格式是独特的,并且与其他语言的格式不同。 Go没有使用常规格式来打印日期,而是使用了参考日期20060102150405
,该日期似乎没有意义,但实际上是有原因的,因为Posix date
命令中的date
是1 2 3 4 5 6
:
Mon Jan 2 15:04:05 -0700 MST 2006
0 1 2 3 4 5 6
The timezone in the middle would have been the 7
(not really sure why they didn’t pick Mon Jan 2 03:04:05 -0600 MST 2007
, by the way)
中间的时区应该是7
(顺便说一下,不确定他们为什么不选择Mon Jan 2 03:04:05 -0600 MST 2007
)
Interesting historical reference: https://github.com/golang/go/issues/444
有趣的历史参考: https : //github.com/golang/go/issues/444
使用格式常量 (Use a format constants)
Go provides in the time
package some handy constants for commonly used formats:
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"
)
You can use them like this:
您可以像这样使用它们:
t := time.Now()
fmt.Println(t.Format(time.ANSIC))