Golang时间解析失败求助:无法解析2023-01-31T10:44:59.800格式时间
问题分析与解决
你的时间解析失败主要有三个核心问题:
- 布局格式与输入不匹配:输入时间用
T分隔日期和时间,而你的布局用的是空格;同时输入包含毫秒部分.800,布局里完全没对应处理。 pm标记无效:你用的15是Go时间布局里的24小时制小时标记(对应0-23),pm是12小时制的后缀,两者不能混用——24小时制不需要am/pm标记,强行加反而会导致解析失败。- 错误信息模糊:你自己封装了错误,丢失了
time.Parse返回的原始错误,这才导致你无法定位问题,应该把原始错误也带上。
正确的解析代码
针对输入格式2023-01-31T10:44:59.800,正确的布局应该是2006-01-02T15:04:05.000,代码示例:
t, err := time.Parse("2006-01-02T15:04:05.000", s) if err != nil { return time.Time{}, fmt.Errorf("could not parse time %q: %w", s, err) }
如果是移除T后的格式2023-01-31 10:44:59.800,布局改成2006-01-02 15:04:05.000即可。
关键说明
- Go的时间布局必须严格对应输入字符串的每个字符,包括分隔符(
T/空格)、小数点等,差一个字符都会解析失败。 - 24小时制用
15,12小时制用03,且12小时制才需要搭配pm/am标记,比如布局01/02/06 03:04:05 pm对应输入01/31/23 10:44:59 am。 - 保留
time.Parse的原始错误(用%w包裹),能直接看到具体不匹配的位置,比如parsing time "2023-01-31T10:44:59.800" as "2006-01-02 15:04:05 pm": cannot parse "T10:44:59.800" as " ",这样一眼就能找到问题。
内容的提问来源于stack exchange,提问作者N P
相关产品推荐
相关产品推荐

