java中日期格式“YYYY”与“yyyy”的区别

java中日期格式“YYYY”与“yyyy”的区别,第1张

java中日期格式“YYYY”与“yyyy”的区别

今天运维反馈了一个问题,现象就是12月26号至29号(写文章日期),日期形式的文件夹名称出现异常:

代码:

DateUtil.format(new Date(), "YYYYMMdd");

我使用的hutool工具类,导致一开始我以为是工具的问题,在hutool官网上查找了好久,后来我测试了SimpleDateFormat,发现也是一样,这说明是日期年份格式的本身问题,下面也说明了这点。
我找到一些较为官方的解释:

针对2015-12-26、2015-12-27这2个日期分别使用*"YYYYMM和yyyyMM格式化**,得到的结果分别是:
YYYYMM: 201512、201612
yyyyMM: 201512、201512
原因定位到YYYYMM"格式化这里面。查看JavaDoc,发现上面描述;
y表示Year,Y表示Week Year。r> 'lf week year ‘Y’ is specified and the calendar doesn’t support any week years, the calendar year (‘y’) is used instead.The support of week years can be tested with a call to getCalendar().isWeekDateSupported()."如果Week Year不支持,同时又使用了Y的话,那么会默认当成y使用。
Week 'Year又是什么意思呢?
"Week number according to the IS0-8601 standard,weeks starting on Monday. The first week of the year is the weekthat contains that year’s first Thursday (=‘First 4-day week’).The highest week number in a year is either 52 or 53.'根据ISO-8601标准,每周从星期一开始计算。每年第一个星期四所在的那个星期为当年的第一周。(1月份至少有4天在该星期)

一周从周日开始,周六结束。刚好2021-12-26是周日,星期已够,那么新的一个星期只能算在新的一年里面,所以年份就出现了跨时空。

总结:
1.不要那么多的想当然,要知其然还要知其所以然。以为是一样,其实不一样。要追根溯源,打破砂罐问到底。其实我在开发时也是做了大量的测试的,然并卵。
2.前人的经验都是经过考验的,还是要存有敬畏之心。要是遵循这种老师一开始教的日期格式“yyyy-MM-dd”,也不会出现这种隐患。
3.任重而道远呀。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5685311.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存