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

Java合法日期格式校验异常:无效日期返回True的原因排查

为什么输入无效日期2010-55-04却返回True?

哦,这个问题我太熟了——你踩了SimpleDateFormat模式字母大小写的坑啦!

你这段代码里的核心错误是日期格式模式用错了:

  • 你写的是"yyyy-mm-dd",但这里的小写mm在SimpleDateFormat里代表的是分钟(minute),而不是你需要的月份(month)!月份对应的正确模式字母是大写的MM。

当你用错误的模式解析2010-55-04时:

  • 2010被正确识别为年份;
  • 55被当成了分钟数(分钟的合法范围是0-59,55完全符合要求);
  • 04被正常识别为日期。

虽然你设置了df1.setLenient(false)来开启严格校验,但它只会检查每个字段自身的合法范围——分钟55是合法的,所以parse()方法不会抛出ParseException,最终方法就返回了true。

修复方法

把日期格式模式改成大写的MM就行:

SimpleDateFormat df1=new SimpleDateFormat("yyyy-MM-dd");

这样再解析2010-55-04时,55会被当作月份来校验,而月份的合法范围是01-12,这时候就会触发ParseException,方法返回false,完全符合你验证有效日期的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:28:25