【发布时间】:2019-01-07 08:00:15
【问题描述】:
DateTimeFormatter 未按照以下 sn-p 提供 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是周年,yyyy是年
-
请仔细阅读SimpleTimeFormatter javadoc。请注意,这是针对 Java 10 的。
-
你需要了解 YYYY & yyyy 的机制。 yyyy 指定日历年,而 YYYY 指定年份(“一年中的一周”),用于 ISO 年-周日历
-
@Kandy 这就是为什么我链接到非常流行的 JodaTime 库,它“是 Java SE 8 之前的 Java 事实标准日期和时间库”,并将
Y处理为year of era (>=0)- 除非明确记录合规性,否则不要假设哪个解析器/格式化程序实现了哪个(部分)标准。
标签: java datetime java-8 datetime-format