You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何LocalDate.parse不验证闰年?输入无效日期未抛出异常

问题解答

先看你的代码:

DateTimeFormatter formatters = DateTimeFormatter.ofPattern("uuuu-MM-dd");
endDate = LocalDate.parse(endDateString, formatters);

输入2023-02-31不触发异常的核心原因是DateTimeFormatter默认采用宽松解析模式(ResolverStyle.LENIENT)。这种模式下,解析器不会严格校验日期合法性,而是自动将非法日期调整为最近的合法日期:比如2023年2月只有28天,输入的31日会被转换成3月3日(28天后再加3天)。

如果需要严格校验日期有效性,必须显式将解析器设置为严格模式:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd")
        .withResolverStyle(ResolverStyle.STRICT);
LocalDate endDate = LocalDate.parse("2023-02-31", formatter);

此时再输入非法日期,就会直接抛出DateTimeParseException异常。

另外补充:除了STRICT模式,还有ResolverStyle.SMART模式——它会在合理范围内调整日期,但不会像LENIENT那样过度宽松。比如2023-02-31在SMART模式下会报错(2月最多28天,31明显超出范围),但输入2023-04-31时,会自动调整为2023-04-30(4月的最后一天)。

内容的提问来源于stack exchange,提问作者Mazin Ismail

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 09:12:34