Dan*_*iel 4 java date datetime-format localdate
String s = "2020 Jun 31";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy MMM dd");
LocalDate date = LocalDate.parse(s, formatter);
System.out.println(date);
Run Code Online (Sandbox Code Playgroud)
输出:
2020-06-30
为什么 31 会变成 30 而没有任何警告或异常?
DateTimeFormatter 有一个ResolverStyle,它会影响解析器对无效日期和时间值的严格程度或宽松程度。要在这种情况下获得异常,您需要将解析器样式设置为 STRICT。
您还需要在格式字符串中使用u(year) 而不是(year-of-era)。y
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu MMM dd")
.withResolverStyle(ResolverStyle.STRICT);
Run Code Online (Sandbox Code Playgroud)
默认解析器类型是SMART:
使用智能解析将为每个字段执行合理的默认值,这可能与严格相同,与宽松相同,或第三种行为。各个领域对此会有不同的解释。
例如,使用智能模式解析ISO日历系统中的年-月和日将确保月份的日期是从1到31,将最后一个有效日期之外的任何值转换为该月的最后一个有效日期。
| 归档时间: |
|
| 查看次数: |
915 次 |
| 最近记录: |