Java LocalDateTime解析

Java LocalDateTime解析,java,validation,java-time,datetime-parsing,Java,Validation,Java Time,Datetime Parsing,为什么我可以在java中解析带有无效小时的日期时间字符串?我错过了什么,或者需要做什么来确保它正确地抛出错误 下面的代码没有抛出错误,应该在哪里抛出 DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss"); LocalDateTime aFormattedDate = LocalDateTime.parse("2019-01-01T24:00:00", dateTimeF

为什么我可以在java中解析带有无效小时的日期时间字符串?我错过了什么,或者需要做什么来确保它正确地抛出错误

下面的代码没有抛出错误,应该在哪里抛出

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss");
LocalDateTime aFormattedDate = LocalDateTime.parse("2019-01-01T24:00:00", dateTimeFormatter); // returns  2019-01-02T00:00:00, should throw an error
将小时指定为25,或包含任何毫秒或其他时间组件都会导致
parse
抛出错误

何处为

LocalDateTime aDate = LocalDateTime.parse("2019-01-01T24:00:00"); //throws an error
是否抛出错误-大约小时天数需要介于0和23之间-如预期的那样

ResolverStyle
因为如果未指定冲突解决程序样式,则默认设置为<代码>智能允许进行一些转换,例如:
24:00:00
将转换到第二天,但
24:00:01
将引发异常。根据enum javadoc:

样式以智能的方式解析日期和时间

使用smart resolution将对每个字段执行合理的默认设置,可能与strict、Length或第三种行为相同。各个字段将对此进行不同的解释

例如,使用智能模式解析ISO日历系统中的年-月和月-日将确保月-日为1到31,将超过月的最后一个有效日的任何值转换为月的最后一个有效日

LocalDateTime.parse()
在引擎盖下使用
ResolveStyle.STRICT
,使其等效于:

DateTimeFormatter fmt = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss")
                                         .withResolverStyle(ResolverStyle.STRICT);
LocalDateTime.parse("2019-01-01T24:00:00", fmt); // DateTimeParseException

这种行为是由jdk 1.8发出的。此外,当分析不存在的闰年日期时,日期没有正确分析,例如2019-02-29T00:00:00拒绝分析不存在的日期怎么会“不正确”?