一个由“ YYYY-MM-dd ”引发的惨案 元旦来临前警惕

简介: 前言在元旦假期到来之际,我刚好准备出去飘几天,然而在使用一些 App 的时候,竟然被我发现了一个应该是由于前端粗心而导致的 bug,在 2019.12.30 出发,结果 App 上显示的是 2020.12.30(吓得我以为我的订单下错了,此处是不是该把程序员拉去祭天了)。鉴于可能会有程序员因此而被拉去祭天,而我以前学 Java 的时候就有留意过这个问题,所以我还是把这个问题拿出来说一下,希望能尽量避免这方面的粗心大意(毕竟这种问题也很难测出来)。

正文

public class DateTest {

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

如果我们日期改成 12.31:


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

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

问题就出现了是吧,虽然是一个小小的细节,但是用户看了也会一脸懵,但是我们作为开发者,不能懵啊,赶紧文档查起来:


图片106.png

y:year-of-era;正正经经的年,即元旦过后;


Y:week-based-year;只要本周跨年,那么这周就算入下一年;就比如说今年(2019-2020) 12.31 这一周是跨年的一周,而 12.31 是周二,那使用 YYYY 的话会显示 2020,使用 yyyy 则会从 1.1 才开始算是 2020。


这虽然是个很小的知识点,但是也有很多人栽到坑里,各位学完可以记录一下咯,觉得好的还可以点个赞关注一下。我在这里祝愿各位码代码时如有神助,永远没有 bug~


106.png


目录
相关文章
|
安全 C++
重生之我要学C++第一天
重生之我要学C++第一天
103 0
【备战蓝桥,冲击省一】-- 日期问题
【备战蓝桥,冲击省一】-- 日期问题
104 0
|
弹性计算 运维 关系型数据库
听过闰年闰月,可你听过闰秒吗?
闰年闰月大家都知道,可是你听说过闰秒这回事情吗?
听过闰年闰月,可你听过闰秒吗?
|
人工智能 大数据 数据中心
2016年,你给阿里云打几分?
每年此时,总会想起电影《甲方乙方》里那句经典台词: 1997 年过去了,我很怀念它。 在葛大爷深沉而又带着几分狡黠的语气中,继而拷问自己: 还记得最初的梦想吗?这一年,做了哪些有意义的事? 所以,到了12月底,人们总不能免俗地要来一份年终总结。 是为纪念
7478 0
GlobalFoundries再卖一地,安森美接下纽约300mm晶圆厂
现在在半导体行业的周期性动荡期,有人求保命,有人借机扩张。
493 0
|
人工智能 自动驾驶 物联网
发牌一周年,中国5G商用的昨天、今天和明天
一年时间,人生可能发生很多变化,而对于5G产业来说,一年时间也足以发生巨大变革。