首页 > 解决方案 > DateTimeFormatter 为边缘情况提供错误的格式

问题描述

DateTimeFormatter根据以下代码段,未提供 2018 年 12 月 30 日和 31 日的正确格式。

final String DATE_FORMAT = "YYYYMM";
DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern(DATE_FORMAT);
LocalDateTime startDate = LocalDateTime.of(2018,12,29,5,0,0);
System.out.println(startDate.format(dateFormat));
//prints 201812
LocalDateTime startDate = LocalDateTime.of(2018,12,30,5,0,0);
System.out.println(startDate.format(dateFormat));
//prints 201912 <------ should be 201812
LocalDateTime startDate = LocalDateTime.of(2018,12,31,5,0,0);
System.out.println(startDate.format(dateFormat));
//prints 201912 <------ should be 201812

这是预期的行为还是 DateTimeFormatter 存在错误?

标签: javadatetimejava-8datetime-format

解决方案


这是预期的行为。YYYY代表“week-based-year”,与日历年不同(参见JavaDoc

您很可能想使用yyyy,这意味着“时代”


推荐阅读