问题原因
中文时间格式和西方国家时间格式不太一样,而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” 确定格式, 就很明朗。
感谢阅读,如果有用的花 可否随手一个小赞,逗我一笑