Java中日期格式化YYYY-DD的坑

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

Java中日期格式化YYYY-DD的坑

兔子托尼啊   2020-01-05 我要评论

写这篇博文是记录下跨年的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/MMhttps://img.qb5200.com/download-x/dd");
        System.out.println("2019-12-31 转 YYYY/MMhttps://img.qb5200.com/download-x/dd 格式: " + formatYYYY.format(strDate1));
        System.out.println("2020-01-01 转 YYYY/MMhttps://img.qb5200.com/download-x/dd 格式: " + formatYYYY.format(strDate2));
        // 小写 YYYY
        SimpleDateFormat formatyyyy = new SimpleDateFormat("yyyy/MMhttps://img.qb5200.com/download-x/dd");
        System.out.println("2019-12-31 转 yyyy/MMhttps://img.qb5200.com/download-x/dd 格式: " + formatyyyy.format(strDate1));
        System.out.println("2020-01-01 转 yyyy/MMhttps://img.qb5200.com/download-x/dd 格式: " + formatyyyy.format(strDate2));
    }

输出结果

2019-12-31 转 YYYY/MMhttps://img.qb5200.com/download-x/dd 格式: 2020/12/31
2020-01-01 转 YYYY/MMhttps://img.qb5200.com/download-x/dd 格式: 2020/01/01
2019-12-31 转 yyyy/MMhttps://img.qb5200.com/download-x/dd 格式: 2019/12/31
2020-01-01 转 yyyy/MMhttps://img.qb5200.com/download-x/dd 格式: 2020/01/01

细心的同学应该发现了2019-12-31用YYYY/MMhttps://img.qb5200.com/download-x/dd
此刻变成了2020/12/31

??为何呢?YYYY这么大的能耐,能跑到2020年代去?

我2019年底买的东西,你如果用YYYY来格式化出库日期,我是不是得到2020年底才能收到货? 此bug问题挺大的呀!

YYYY 到底是何方妖怪?

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们