Java LocalDateTime解析
为什么我可以在java中解析带有无效小时的日期时间字符串?我错过了什么,或者需要做什么来确保它正确地抛出错误 下面的代码没有抛出错误,应该在哪里抛出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
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拒绝分析不存在的日期怎么会“不正确”?