几年前的项目用了YYYY-MM-dd,跨年夜老板喊我回去改Bug

点击上方“码农进阶之路”,选择设为星标

回复面经获取面试资料

几年前的项目用了YYYY-MM-dd,跨年夜老板喊我回去改Bug

昨天听一粉丝讲到自己的项目中因为格式化时间用到了"YYYY-MM-dd",元旦当天被喊回去改Bug,到底是怎么回事哪?

这是开发过程中的一个小细节,一不小心就掉到坑里了。

我们先看一下什么情况!

几年前的项目用了YYYY-MM-dd,跨年夜老板喊我回去改Bug几年前的项目用了YYYY-MM-dd,跨年夜老板喊我回去改Bug几年前的项目用了YYYY-MM-dd,跨年夜老板喊我回去改Bug

那么产生这个 Bug 的原因是什么呢?其实很简单,就是把 yyyy-MM-dd 写成了 YYYY-MM-dd

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

几年前的项目用了YYYY-MM-dd,跨年夜老板喊我回去改Bug

运行结果为:

几年前的项目用了YYYY-MM-dd,跨年夜老板喊我回去改Bug

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

几年前的项目用了YYYY-MM-dd,跨年夜老板喊我回去改Bug

那么产生这个问题的原因是什么呢?其实很简单:Y 和 y 实际上代表了不同的含义。

几年前的项目用了YYYY-MM-dd,跨年夜老板喊我回去改Bug
  • y:year-of-era;正正经经的年;

  • Y:week-based-year;只要本周跨年,那么这周就算入下一年;也就是 12 月

可以看出来使用"YYYY-MM-DD"格式化时间出现了错误!

具体是什么原因哪?

这是因为Java语言中在特定的时间或者数字等数据上,平时你感觉一切都OK!但是在特定时间、特定环境就会出问题的情况!刚好格式化时间就算其中的一个!

2020年跨年的时候刚好是2019和2020交换的时候,于是就出现了格式化时间的问题,归其原因就是使用了"YYYY-MM-dd"格式化时间!

YYYY 是 week-based-year,现在就已经 2020 年了,yyyy 还是 2019 年!

Java自己的BUG,还向圣经一样让人又记又背的! [笑cry]

开发中还是用yyyy-MM-dd来做日期格式化,其它的就不要用了!

几年前的项目用了YYYY-MM-dd,跨年夜老板喊我回去改Bug

往期精选

2019秋招:460道Java后端面试高频题答案版【模块一:Java基础】

2019秋招:460道Java后端面试高频题答案版【模块二:Java集合类】

2019秋招:460道Java后端面试高频题答案版【模块三:Java并发】

2019秋招:460道Java后端面试高频题答案版【模块四:Java虚拟机】

2019秋招:460道Java后端面试高频题答案版【模块五:计算机网络】

2019秋招:460道Java后端面试高频题答案版【模块六:计算机操作系统】

2019秋招:460道Java后端面试高频题答案版【模块七:设计模式】

面试题:讲讲Redis有哪几个过期策略?

工具篇:这可能是全 GitHub 最牛逼的抢票神器!

码农进阶之路

长按二维码关注 

几年前的项目用了YYYY-MM-dd,跨年夜老板喊我回去改Bug

面经 | 原理 | 源码 | 实战 | 工具

几年前的项目用了YYYY-MM-dd,跨年夜老板喊我回去改Bug