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出现错误?
答案 0 :(得分:9)
这是预期的行为。 YYYY
代表“以周为基础的年份”,与日历年不同(请参阅JavaDoc)
您最有可能想使用yyyy
,意思是“时代”
答案 1 :(得分:5)
YYYY是周年,yyyy是年
因此,更改final String DATE_FORMAT = "YYYYMM";
ro final String DATE_FORMAT = "yyyyMM";
应该会给您正确的结果。有关模式的更多信息,请参见javadoc of DateTimeFormatter。
2019年的第一周从2018年12月30日开始。有关降雪年的更多信息,请参阅此link
答案 2 :(得分:2)
y
代表“年龄”,而Y
代表week-based-year
替换:
final String DATE_FORMAT = "YYYYMM";
收件人:
final String DATE_FORMAT = "yyyyMM";