我在 Java SE8 项目中使用 javac 15.0.1。
我对 LocalDate 有不规则的输入:
String fateDate = "1970-02-29"
;
使用 LocalDate 的 parse() 我得到这个异常(正确):
LocalDate.parse(fateDate);
线程“主”java.time.format.DateTimeParseException 中的异常:无法解析文本“1970-02-29”:日期“2 月 29 日”无效,因为“1970”不是闰年
但是使用 DateTimeFormatter 会进行某种更正:
final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("y-M-d");
TemporalAccessor ta = dtf.parse(fateDate);
System.out.println(ta);
产生于:
{},ISO 解析为 1970-02-28
此行为对于所有月份和 day<32 的所有值都是相同的。因此,对于四月,您不会得到 31 的异常,而是将 LocalDate 以 30 作为一天的值。这看起来不像是“早早失败”的完美化身......
为什么会有不同的行为
- 在 LocalDate.parse() 与 DateTimeFormatter.parse() 中?
- 在 DateTimeFormatter 中为无效的 days_of_month >31 与!>31?