java 中日期格式化的 YYYY 和 yyyy 易错记录(亲测)

情况
  Date date=new Date("12/31/2021");
  SimpleDateFormat s=new SimpleDateFormat("YYYY-MM-dd");
  System.out.println(s.format(date));

"YYYY-MM-dd"这段格式化代码输出结果是

2022-12-31

SimpleDateFormat 的格式换成 "yyyy-MM-dd"则输出正确

2021-12-31

原因
StackOverflow 一个帖子说的很直白

@“YYYY” is week-based calendar year.
@“yyyy” is ordinary calendar year.

YYYY 是基于周的日历,也就是说如果当前周跨年,YYYY会把年份设为跨年后的年份,呈现的效果就是 年份+1
上面的例子中 2021年12月31号是周五,31号所在的这一周跨年了,所以最后输出是 2022,
如果是 2022年12月31号(这一天是周六) 用YYYY格式化 ,输出则是正常的 2022-12-31

yyyy就是我们平常理解的日历,所以平时对年的格式无脑用yyyy就行了

至于为什么YYYY是基于周,得去看 ISO 8601 这个标准了~

具体代码如下所示:

SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
String time = "2022-12-31";
System.out.println("日期:" + time);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date timeDate = sdf.parse(time);
System.out.println("准确日期为" + timeDate);
System.out.println("YYYY-MM-dd HH:mm:ss解析后的结果为:" + simpleDateFormat2.format(timeDate));


参考链接:https://blog.csdn.net/qq_44831907/article/details/123379713

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值