Java DateTimeFormatter格式化LocalDate出现年份偏移异常问题
问题复现说明
该问题可以100%复现,所有实现了JSR-310时间规范的JDK版本(Java 8及以上)都可以复现该现象,和你使用的Netbeans 12.5开发环境、Java 17版本没有关联。
问题出现原因
- 你在
DateTimeFormatter的格式化规则中使用了大写的YYYY作为年份占位符,它代表的是基于周计算的年份,规则为:如果某一周有不少于4天属于某一个日历年,那么这一整周的所有日期的周计算年份都归属到该年。 - 2021年1月1日属于2020年12月28日~2021年1月3日的这一周,该周有4天落在2020年,因此这一周所有日期的
YYYY取值都是2020,就出现了你观察到的年份少1的问题。 - 2021年11月14日所在的周大部分天数都落在2021年,所以
YYYY的取值和常规公历年一致,看起来输出结果正常。
修复方案
将格式化字符串中的大写YYYY替换为小写的yyyy即可,yyyy是标准公历日历年的占位符,符合普通业务场景的日期格式化需求。
内容的提问来源于stack exchange,提问作者duaw
相关产品推荐
相关产品推荐

