写这篇博文是记录下跨年的bug。去年隔壁组的小伙伴就是计算两个日期之间间隔的天数,因为跨年的原因计算有误。
当时测试组的小姐姐也没有模拟出来这种场景,导致上生产环境直接影响线上的数据。
今天逛技术论论坛正好遇到Java日期的操作bug。
1 yyyy 和 YYYY
别看字,看代码
@Test
public void testWeekBasedYear() {
Calendar calendar = Calendar.getInstance();
// 2019-12-31
calendar.set(2019, Calendar.DECEMBER, 31);
Date strDate1 = calendar.getTime();
// 2020-01-01
calendar.set(2020, Calendar.JANUARY, 1);
Date strDate2 = calendar.getTime();
// 大写 YYYY
SimpleDateFormat formatYYYY = new SimpleDateFormat("YYYY/MM/dd");
System.out.println("2019-12-31 转 YYYY/MM/dd 格式: " + formatYYYY.format(strDate1));
System.out.println("2020-01-01 转 YYYY/MM/dd 格式: " + formatYYYY.format(strDate2));
// 小写 YYYY
SimpleDateFormat formatyyyy = new SimpleDateFormat("yyyy/MM/dd");
System.out.println("2019-12-31 转 yyyy/MM/dd 格式: " + formatyyyy.format(strDate1));
System.out.println("2020-01-01 转 yyyy/MM/dd 格式: " + formatyyyy.format(strDate2));
}
输出结果
2019-12-31 转 YYYY/MM/dd 格式: 2020/12/31
2020-01-01 转 YYYY/MM/dd 格式: 2020/01/01
2019-12-31 转 yyyy/MM/dd 格式: 2019/12/31
2020-01-01 转 yyyy/MM/dd 格式: 2020/01/01
细心的同学应该发现了2019-12-31用YYYY/MM/dd
此刻变成了2020/12/31
??为何呢?YYYY这么大的能耐,能跑到2020年代去?
我2019年底买的东西,你如果用YYYY来格式化出库日期,我是不是得到2020年底才能收到货? 此bug问题挺大的呀!
YYYY 到底是何方妖怪?
以上是关于Java中日期格式化YYYY-DD的坑的主要内容,如果未能解决你的问题,请参考以下文章
如何从我的 DatePicker 片段中传输格式化的日期字符串?
微服务设计指导-feignclient的compression参数导致报文返回为gzip格式带来的坑