又双叒有兄弟因为 YYYY-MM-dd 被叫去加班了...

共 2143字,需浏览 5分钟

 ·

2021-12-28 15:28

今天上海降温到零下了,一点起床的欲望都没,想着直接睡到吃午饭吧。结果看到群里小伙伴吐槽一早被叫起来修Bug,定睛一看,要修的BUG居然又是之前说过很多次的YYYY-MM-dd问题,这个不是之前已经说过很多次了吗https://blog.didispace.com/YYYY-MM-dd-2020-again/),怎么还有人中招呢

 

不过再想想,其实也正常,每一年都有新人,即使是老人,也可能因为跳槽接手已经存在问题的系统,当然也可能没关注DD,没看过之前的推送  ?不管什么原因,也许现在还有其他小伙伴正在修Bug的路上,所以,赶紧起床推一篇,聊聊这个问题吧。

如果你正好碰到的,可以看看了解下原因,做好相应的处理;如果还没碰到的,最好也自查一下。如果你已经很了解这个,那么把这篇文章分享到朋友圈,也提醒下身边其他的同行朋友们吧,也许会炸出几个正在修Bug路上的兄弟 

事故现场

我们先来写个单元测试,重现一下这个问题。

测试逻辑:

  • 1、创建两个日期格式化:
    • 一个是存在问题的YYYY-MM-dd
    • 另一个是正确用法yyyy-MM-dd
  • 2、分别去格式化两个不同的日期:2021年12月25日(周六),2020年12月26日(周日)

具体代码如下:

public class Tests { 

@Test
public void test() throws Exception {
SimpleDateFormat df1 = new SimpleDateFormat("YYYY-MM-dd");
SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd");

Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, 2021);
c.set(Calendar.MONTH, 11);

// 2021年12月25日周六
c.set(Calendar.DATE, 25);
System.out.println("YYYY-MM-dd = " + df1.format(c.getTime()));
System.out.println("yyyy-MM-dd = " + df2.format(c.getTime()));

// 分割线
System.out.println("========================");

// 2021年12月26日 周日
c.set(Calendar.DATE, 26);
System.out.println("YYYY-MM-dd = " + df1.format(c.getTime()));
System.out.println("yyyy-MM-dd = " + df2.format(c.getTime()));
}

}

跑一下测试,可以看到输出结果如下:

YYYY-MM-dd = 2021-12-25
yyyy-MM-dd = 2021-12-25
========================
YYYY-MM-dd = 2022-12-26
yyyy-MM-dd = 2021-12-26
  • 2021年12月25日(周六),两种格式化都正确
  • 2021年12月26日(周日),YYYY-MM-dd出了问题,年份到了2022年

问题原因

为什么YYYY-MM-dd格式化2021年12月26日的时候,会到2022年呢?

因为YYYY是week-based-year,表示:当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年。

所以2021年12月26日那天在这种表述方式下就已经到 2022年了。

而当使用yyyy的时候,就还是 2021 年。

好了,最后把这篇文章分享到朋友圈,提醒下身边其他的小伙伴吧,看看能炸出几个今天再修Bug路上的兄弟 

最后的最后,平时喜欢讨论技术的小伙伴也可以加入我们的高质量技术交流群,与优秀的人在一起,自己也会优秀起来,点击加入



往期推荐



SQL 为什么动不动就 N 百行以 K 计

Java 18 都要来了,你不会还在用Java 8吧?

Log4j2 消停了,Logback 开始塌房了?

前瞻:Spring 6.0将停止支持Freemarker和JSP

Spring Boot Admin 2.5.5 发布,支持在线重启服务


了解行业热点、探索技术前沿

技术人的弯道超车从关注程序猿DD开始

这有份来自阿里大佬的《LeetCode刷题答案》PDF新鲜出炉

年末面试必备!点击直接领取吧

浏览 31
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报