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.任重而道远呀。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值