前言
部门发邮件,java日期格式化有坑,有类似的问题赶紧自查,抓紧修复。这个坑挺有意思,看看你有没有遇到过。
正文
提交的代码被老大打回,并邮件告知全部门,原因是日期格式化用法有问题,SimpleDateFormat.可能是从其他地方直接复制的,没检查,用了 YYYY-MM-dd
我也工作过8年了,一直在北京,算是一名有经验的码农了,实在不应该犯这么低级错误。
由于是在国际化部门,每个国家的时间都可能不一样,后果更要命了!下面我介绍下这个坑。
首先简化逻辑后的代码如下
输出如下:
很明显,使用YYYY时,2021年变成了2022年,在正常情况下可能没问题,但是在跨年的时候大概率就会有问题了。
原因也简单:小写‘y’表示当天所在的年,大写‘Y’代表week in which year,(Week year 意思是当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年)年末的最后一周和年初的第一周可能有”惊喜“了
另外阿里的插件已经可以实时检测这个错误
要修复这个问题很简单,日期、货币等等共用的方法作为组件提供给业务方,这样大家就不会踩这个雷了
总结
- 日期格式年统一用yyyy小写。
- 封装成统一的工具类,不要直接复制别人的格式
回头一想,如果跨年的时候爆出来,不只我,老大可能都要卷铺盖走人,因为之前写错一个日文的标点符号,都成了twitter热搜。