JAVA日期格式化中的“yyyy”与“YYYY”

JAVA日期格式化中的“yyyy”与“YYYY”

大家在做开发时,尤其是前后端交互时经常会遇到将字符串类型变量转换成日期类型变量,或者将日期类型变量转换为字符串类型变量。

这样的场景大家一般会用SimpleDateFormat来进行转换吧。转换时如果涉及到年就会指定年的格式。可是大家知道年的格式有“yyyy”,“YYYY”大小写的区分吗?知道这两个有什么区别吗?

JAVA既然定义了这样大小写两种的形式,自然是有区别的。像表示时间格式的“H”和“h”,“H”是表示24小时制的,而“h”则是表示12小时制的。而“YYYY”和“yyyy”也是有很大区别的,用不对的话是会有大问题的。

俗话说,耳听为虚,眼见为实。直接编码执行看看。

大家觉得执行结果会是什么呢,会是下面这样?

yyyy-MM-dd格式:2019-12-29

YYYY-MM-dd格式:2019-12-29

下面就是见证奇迹的时刻,一起来看执行结果吧。

惊不惊讶,“YYYY-MM-dd”的格式整整跨越了一年。

可能有的朋友在2019年底的时候看过类似的报道,好多网站或者APP显示日期变成了2020年底。究其原因就是因为做日期格式转换时用了这个“YYYY”。

“YYYY”表示的是Week year,就是这天所在的周所属的年。而每年的第一周是怎么定义的呢。

ISO 8601中给出了定义:本年第一个周四所在的那一个星期。

那2020年的第一周按照这个定义就是2019年12月29日至2020年1月5日这7天。所以我们的示例中12月29日就算在2020年的第一周了。按照Week year,2019年12月29日也就算在2020年了。

如此就有了我们示例的执行结果。

这个逻辑一般我们都是不会用的,所以代码中的做日期个时候操作是一定要用“yyyy”而不要用“YYYY”哦。不然老板找你时不要说我没有提醒你哦。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值