Golang解析时间字符串

代码笔记 | 📅 2020-09-09 | golang

操作

使用 time.Parse 方法,对时间字符串进行解析,返回 time.Time 对象。

参数

第一个参数是 时间格式化字符串,即 format.go 中定义的这些内容:

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"
)

第一个参数取什么格式,应根据第二个参数,也就是被解析的时间字符串决定。

第二个参数是将要被解析的时间字符串。如:"2019-11-27 00:00:00" (二零一九年十一月二十七日零点)
其对应的时间格式化字符串就是:"2006-01-02 15:04:05"

举例

timeString := "2019-11-27 00:00:00"
parsedTime, err := time.Parse("2006-01-02 15:04:05", timeString)
if err != nil {
	log.Printf("Parse time error: %+v", err)
}
fmt.Printf("parsedTime: %+v\n", parsedTime)

上述代码,我们将得到输出:parsedTime: 2019-11-27 00:00:00 +0000 UTC

特殊情况

上述操作都是在默认的 UTC 时区进行的,倘若你并非处于 UTC 时区,则不应该使用time.Parse 方法。
针对不同时区,time包提供了 ParseInLocation 方法,指定 time.Location 进行时间解析。
用法如下:

timeString := "2019-11-27 00:00:00"
parsedTimeInLocation, err := time.ParseInLocation("2006-01-02 15:04:05", timeString, time.Local) // 注意此处不同
if err != nil {
	log.Printf("Parse time error: %+v", err)
}
fmt.Printf("parsedTimeInLocation: %+v\n", parsedTimeInLocation)

此时,我们得到输出:parsedTimeInLocation: 2019-11-27 00:00:00 +0800 CST