Go 解析日期格式, 简单解决 parsing time xx as xx: cannot parse xx as xx OR month/hour out of range

文章讲述了在Go语言中遇到中文时间格式解析问题,内置方法不适用。作者通过调试和测试发现,通过修改layout字符串,例如使用2006-01-0215:04:05格式可以解决部分问题,但并非所有情况都适用。日期大于等于12或时间小于15:04会出现错误。建议使用自定义LocalTime或编写本地解析函数确保稳定性。
摘要由CSDN通过智能技术生成

问题原因

中文时间格式和西方国家时间格式不太一样,而go语言内置时间解析方法对中文格式很不友好,很多错误。

解决办法

其他大牛博主给出了很好的方案,通过自定义LocalTime,很棒。 我通过暴力测试,发现通过修改

layout的数字可以解决。  过程是搜到一篇网上的example, 完全一样的代码,本地就是报错,copy到他的代码之后,一个字符一个字符的往我原来的 layout格式改。 发现了一些规律。 不过规律可以不要太当真,没有严格测试,只是比较轴的测试了20分钟,感觉时间花的冤枉,发给大家避避坑。 想看深层次原因的,去看大牛的文章

调试过程和规律

1. 我的源代码:start, erro := time.Parse("2023-01-13 10:00:00", strs[0])

运行报错:parsing time xx as xx: cannot parse xx as xx 

2. 改变layout: start, erro := time.Parse("2006-01-02 15:04:05", strs[0]) 之后正常

3. 改变layout字符串 为 "2006-01-02 15:04:00" 还正常, 改为 "2006-01-02 15:00:00" 还正常,然后改为了 10点整,就开始出现之前的错误。反复尝试,发现时间点必须大于15点,

4. 尝试修改日期,发现日期大于等于12号 就开始出现 month out of range:

 5. 很开心地想要分享上述经验的时候,又测了几个,发现很神奇的事情,分钟数小于4也会报错,并且报的错误还会不一样。和上述时间大于 15点又相悖了。  所以大家对规律不要太认真,找一个合适的字符串,测试稳定就好。或者自己本地实现一个。 总是 golang time包里的解析方法不太靠谱,不像以前写 JAVA 的时候 用“YYYY-MM-YY HH:MM:SS” 确定格式, 就很明朗。

感谢阅读,如果有用的花 可否随手一个小赞,逗我一笑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值