工作6年了日期时间格式化还在写YYYY疯狂给队友埋雷

文章讲述了开发人员在使用SimpleDateFormat进行日期格式化时遇到的问题,由于混淆大写的YYYY和yyyy可能导致跨年时的错误。作者强调统一日期格式并使用公共工具类的重要性,以防止此类手误引发的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

哈喽小伙伴们好久不见,今天来个有意思的雷,看你有没有埋过。

正文

不多说废话,公司最近来了个外地回来的小伙伴,在广州工作过6年,也是一名挺有经验的开发。

他提交的代码被小组长发现有问题,给打回了,原因是里面日期格式化的用法有问题,用的SimpleDateFormat,但不知道是手误还是什么原因,格式用了YYYY-MM-dd。

这种写法埋了一个不大不小的雷。

用一段测试代码就可以展示出来问题

1.jpg

打印结果如下:

2.jpg

很明显,使用YYYY时,2023年变成了2024年,在正常情况下可能没问题,但是在跨年的时候大概率就会有问题了。

原因比较简单,与小写的yyyy不同,大写的YYYY表示一个基于周的年份。它是根据周计算的年份,而不是基于日历的年份。通常情况下,两者的结果是相同的,但在跨年的第一周或最后一周可能会有差异。

比如我如果换成2023-12-30又不会有问题了

3.jpg

另外,Hutool工具类本身是对Java一些工具的封装,DateUtil里面也有用到SimpleDateFormat,因此也会存在类似的问题。

4.jpg

避免这个问题的方法也十分简单,要有公用的格式类,所有使用日期格式的地方都引用这个类,这个类中就定义好yyyy-MM-dd想给的格式即可,这样就不会出现有人手误给大家埋雷了。

总结

  1. 日期时间格式统一使用yyyy小写;
  2. 日期格式要规定大家都引用定义好的工具类,避免有人手误打错。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值