String s = "2020 Jun 31";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy MMM dd");
LocalDate date = LocalDate.parse(s, formatter);
System.out.println(date);
Output:
2020-06-30
为什么 31 会变成 30 而没有任何警告或异常?
DateTimeFormatter 有一个旋转变压器风格这会影响解析器对无效日期和时间值的严格或宽松程度。要在这种情况下获得异常,您需要将解析器样式设置为 STRICT。
您还需要使用u
(年)代替y
(纪元)在格式字符串中。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu MMM dd")
.withResolverStyle(ResolverStyle.STRICT);
默认解析器类型是SMART
:
使用智能解析将为每个字段执行合理的默认值,这可能与严格相同,与宽松相同,或第三种行为。各个领域对此会有不同的解释。
例如,使用智能模式解析ISO日历系统中的年-月和日将确保月份的日期是从1到31,将最后一个有效日期之外的任何值转换为该月的最后一个有效日期。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)