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
相关产品推荐
相关产品推荐

