最近新旧年交替之际,又有关于 YYYY-MM-DD 和 yyyy-MM-dd 的区别 Bug 讨论出现,本文简单去了解了一下二者的区别不同。
1、yyyy 和 YYYY不一样
如果对时间处理不那么熟悉的朋友看到这里,会认为 yyyy 和 YYYY 有什么区别么?在代码里面敲一下,他们的结果也都是相同的啊!
publicclassDateTest{publicstaticvoidmain(String[]args){Calendarcalendar=Calendar.getInstance();calendar.set(2019,Calendar.AUGUST,31);DatestrDate=calendar.getTime();DateFormatformatUpperCase=newSimpleDateFormat("yyyy-MM-dd");System.out.println("2019-08-31toyyyy-MM-dd:"+formatUpperCase.format(strDate));formatUpperCase=newSimpleDateFormat("YYYY-MM-dd");System.out.println("2019-08-31toYYYY/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
YYYY这么大的能耐,能跑到2020年代去?
我 2019年底买的东西,你如果用YYYY来格式化出库日期,我是不是得到 2020年底才能收到货?此bug问题挺大的呀!
Java's DateTimeFormatter pattern "YYYY" gives you the week-based-year, (by default, ISO-8601 standard) the year of the Thursday of that week.
例子:
下面就是用YYYY格式化代码
- 12/29/2019 将会格式化到 2019年这一周还属于2019年
- 12/30/2019 将会格式化到 2020年这一周已经属于2020年
week-based year 是 ISO 8601 规定的。
2019-12-31号这一天,如果按照周算年份已经属于 2020年了,所以格式化之后就变成 2020年,后面的月份日期不变。
- y:year-of-era;正正经经的年;
- Y:week-based-year;只要本周跨年,那么这周就算入下一年;也就是 12 月
这是开发过程中的一个小细节,一不小心就掉到坑里了。
2、dd 和 DD 也不一样
别看字,看代码
输出结果:
Y=2020 M=01 D=20 formatted with "MM/DD/YYYY" -> 01/20/2020Y=2020 M=01 D=21 formatted with "DD/MM/YYYY" -> 21/01/2020Y=2020 M=01 D=22 formatted with "YYYY-MM-DD" -> 2020-01-22Y=2020 M=03 D=17 formatted with "MM/DD/YYYY" -> 03/77/2020Y=2020 M=03 D=18 formatted with "DD/MM/YYYY" -> 78/03/2020Y=2020 M=03 D=19 formatted with "YYYY-MM-DD" -> 2020-03-79
看到没有?
最后的3个日期都错误了,这里的大写的DD代表的是处于这一年中那一天,不是处于这个月的那一天。
小伙伴们一定要记住了不要犯类似的错误。
3、结论
YYYY 和 yyyy 不一样的,DD 和 dd 也是不一样的,开发代码过程中要切记!
转载请注明链接地址:荐爱小站 » 代码中 YYYY-MM-DD 和 yyyy-MM-dd 的区别 Bug