日期时间格式化程序为边缘情况提供错误的格式



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

这是预期的行为还是日期时间格式化程序存在错误?

这是

预期行为。 YYYY代表"基于周的年份",与日历年不同(参见JavaDoc)

您最有可能要使用yyyy,意思是"时代年份"

YYYY 是周年,yyyy 是年

因此,更改final String DATE_FORMAT = "YYYYMM"; ro final String DATE_FORMAT = "yyyyMM";应该会给您正确的结果。有关模式的更多信息,请参阅 DateTimeFormatter 的 javadoc。

2019年

的第一周从2018年12月30日开始。有关周年的更多信息,请参阅此链接

y表示"时代年份",而Y表示week-based-year

取代:

final String DATE_FORMAT = "YYYYMM";

自:

final String DATE_FORMAT = "yyyyMM";

最新更新