golang日期格式转换
原创
©著作权归作者所有:来自51CTO博客作者lemon时雨的原创作品,请联系作者获取转载授权,否则将追究法律责任
在日常开发的过程中,经常会遇到前端或接口调用返回的时间格式的字符串转换为time格式落库的诉求,在转换格式的的过程中经常会遇到如下报错:
问题的意思是,需要转换的字符串格式不正确。
原因分析
在使用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