警惕由于使用YYYY-MM-dd引发的一场生产问题

写在前面:
我是「境里婆娑」。我还是从前那个少年,没有一丝丝改变,时间只不过是考验,种在心中信念丝毫未减,眼前这个少年,还是最初那张脸,面前再多艰险不退却。
写博客的目的就是分享给大家一起学习交流,如果您对 Java感兴趣,可以关注我,我们一起学习

前言:上周日下午突然收到群里信息说让查下代码里是否有在使用YYYY-MM-dd来格式化时间。由于其他组项目有这样写导致文件审批不通过而产生了生产问题。

一、问题复现

写一个测试类来复现这个问题,创建两个格式化时间一个是正常的yyyy-MM-dd,另一个是YYYY-MM-dd。

  public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat sdf1 = new SimpleDateFormat("YYYY-MM-dd");
        Calendar instance = Calendar.getInstance();  //当前时间为2020-12-30
        instance.add(Calendar.DATE,-4);
        System.out.println("yyyy-MM-dd: " + sdf.format(instance.getTime()));
        System.out.println("YYYY-MM-dd: " + sdf1.format(instance.getTime()));
        System.out.println("=========我是分割线=========");
        Calendar instance1 = Calendar.getInstance();
        instance1.add(Calendar.DATE,-3); //当前时间为2020-12-30
        System.out.println("yyyy-MM-dd = " + sdf.format(instance1.getTime()));
        System.out.println("YYYY-MM-dd = " + sdf1.format(instance1.getTime()));
    }
    }

测试结果为:

yyyy-MM-dd: 2020-12-26
YYYY-MM-dd: 2020-12-26
=========我是分割线=========
yyyy-MM-dd = 2020-12-27
YYYY-MM-dd = 2021-12-27
  • 2020年12月26日(周六),两个格式解析日期都正确。
  • 2020年12月27日(周日),YYYY-MM-dd解析出现问题,年份显示为2021年

一、问题原因

带着疑问为什么YYYY-MM-dd格式化2020年12月27日时候,年份会变成2021年呢?

因为JDK6的SimpleDateFormat只有小y,没有大Y。JDK7开始引入了大Y,表示Week year。
Week year意思是当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年

敲黑板:因此我们格式化时候一定要用yyyy-MM-dd这样的格式,才能避免我们程序出现跨年问题。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

境里婆娑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值