DateTimeFormatter 为边缘情况提供了错误的格式
DateTimeFormatter giving wrong format for edge cases
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 存在错误?
这是预期的行为。 YYYY
代表"week-based-year",与日历年不同(见JavaDoc)
您很可能想使用 yyyy
,这意味着 "year-of-era"
YYYY 是周年,yyyy 是年
所以更改 final String DATE_FORMAT = "YYYYMM";
ro final String DATE_FORMAT = "yyyyMM";
应该会给你正确的结果。有关模式的更多信息,请参阅 javadoc of DateTimeFormatter.
2019 年的第一周从 2018 年 12 月 30 日开始。请参阅此link 了解有关凌晨的更多信息
y
用于 "year-of-era" 而 Y
用于 week-based-year
替换:
final String DATE_FORMAT = "YYYYMM";
至:
final String DATE_FORMAT = "yyyyMM";
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 存在错误?
这是预期的行为。 YYYY
代表"week-based-year",与日历年不同(见JavaDoc)
您很可能想使用 yyyy
,这意味着 "year-of-era"
YYYY 是周年,yyyy 是年
所以更改 final String DATE_FORMAT = "YYYYMM";
ro final String DATE_FORMAT = "yyyyMM";
应该会给你正确的结果。有关模式的更多信息,请参阅 javadoc of DateTimeFormatter.
2019 年的第一周从 2018 年 12 月 30 日开始。请参阅此link 了解有关凌晨的更多信息
y
用于 "year-of-era" 而 Y
用于 week-based-year
替换:
final String DATE_FORMAT = "YYYYMM";
至:
final String DATE_FORMAT = "yyyyMM";