在日常开发的过程中,经常会遇到前端或接口调用返回的时间格式的字符串转换为time格式落库的诉求,在转换格式的的过程中经常会遇到如下报错:

golang日期格式转换_字符串

问题的意思是,需要转换的字符串格式不正确。

原因分析

在使用​​time.ParseInLocation​​函数转换日期时,layout的格式选择有问题,图中需要转换的字符串的时间格式是time.RFC3339格式,改成这个就不报错了。

常见的日期格式:

  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 并不代表任何东西.它只是 ISO 8601 组合日期时间格式 所需的分隔符.可以将其理解为 Time 的缩写

字符串中的 Z 代表时区偏移量(代表小时前的“+”号或“-”号)。所以图中的字符串日期符合​RFC3339​​日期格式

"2022-08-31T16:44:55+08:00" //"2006-01-02T15:04:05Z07:00"

因此,在大家需要对时间格式的字符串用​​time.ParseInLocation​​函数进行转换前,可以对照标准日期格式,选择相应的layout即可。

日期格式转换三方库

三方库:​​https://github.com/araddon/dateparse​