情况
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