Date date=new Date("12/31/2021");
SimpleDateFormat s=new SimpleDateFormat("YYYY-MM-dd");
System.out.println(s.format(date));
这段代码输出结果是
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,
如果是 2017年12月31号(周日) 用YYYY格式化 ,输出则是正常的 2017-12-31
yyyy就是我们平常理解的日历,所以平时对年的格式用yyyy就行了
至于为什么YYYY基于周,得去看 ISO 8601了~



