因为一个YYYY-MM-dd的Bug,我被老板骂的狗血淋头!

点击上方“码农突围”,马上关注

这里是码农充电第一站,回复“666”,获取一份专属大礼包

真爱,请设置“星标”或点个“在看”

前两天,一个 YYYY-MM-dd 的Bug,好多码农被提了一堆Bug,和客户投诉,还有网友说道,就这Bug,改是一行的事,被老板骂了半天,还觉得我这种低级错误也犯。真是悲催!这次这个影响对不少app都有波及,比如有某知名外卖上的一个评论日期:

日期显示:“2020-12-31”!有人吓尿了,这2020刚过。尤其是很多知名app,纷纷躺枪。

如果对时间处理不那么熟悉的程序员看到这里,会认为 yyyy 和 YYYY 有什么区别么?在代码里面敲一下,他们的结果也都是相同的啊!

public static void main(String[] args) {
    Calendar calendar = Calendar.getInstance();
    calendar.set(2019, Calendar.AUGUST, 31);
    Date strDate = calendar.getTime();
    DateFormat formatUpperCase = new SimpleDateFormat("yyyy-MM-dd");
    System.out.println("2019-08-31 to yyyy-MM-dd: " + formatUpperCase.format(strDate));
    formatUpperCase = new SimpleDateFormat("YYYY-MM-dd");
    System.out.println("2019-08-31 to YYYY/MM/dd: " + formatUpperCase.format(strDate));
  }

运行结果为:

2019-08-31 to yyyy-MM-dd: 2019-08-31
2019-08-31 to YYYY/MM/dd: 2019-08-31

但是如果我们把日期改成 2019-12-31 再试试呢?结果产生了差异:

2019-12-31 to yyyy-MM-dd: 2019-12-31
2019-12-31 to YYYY-MM-dd: 2020-12-31

那么产生这个问题的原因是什么呢?其实很简单:Y 和 y 实际上代表了不同的含义。说明:日期格式化时, yyyy 表示当天所在的年,而大写的 YYYY 代表是 week in which year,意思是当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,返回的 YYYY 就是下一年。

解决办法:只需要把 YYYY-MM-dd 改成 yyyy-MM-dd 就可以了。

说句题外话,有不少人想加鱼哥微信,鱼哥姑且放出来,但是坑位有限哦

有热门推荐????

1、34岁IBM工程师电脑被抢身亡:以命相争背后,是无处安放的生活

2、【干货】336页《机器学习实战》PDF

3、浓缩就是精华!106页的《Python进阶》中文版(附下载)

发布了496 篇原创文章 · 获赞 2200 · 访问量 150万+

猜你喜欢

转载自blog.csdn.net/hejjunlin/article/details/103966392