我正在尝试实现一个将String
解析为Date
的方法,我想使用SimpleDateFormat
,因为这似乎可以完成这项工作:
java.util.Date parseMonth(String str) throws ParseException {
SimpleDateFormat format=new SimpleDateFormat("MM/yyyy");
return format.parse(str);
}
但由于某些原因,我得到的输入没有ParseException
,我希望得到一个。
检查String
是否是正确日期(关于某些实现依赖格式)的首选方法是什么?
答案 0 :(得分:2)
SimpleDateFormat
是宽松的,因此它会尝试变聪明(通常是失败的)并执行“月零变为上一年的12月”等事情。
要使无效输入抛出异常,只需禁用宽松行为:
SimpleDateFormat format = new SimpleDateFormat("MM/yyyy");
format.setLenient(false); // not lenient
这会为无效输入引发ParseException
,例如00/2000
和13/2000
。
但是现在我们有更好的API。从Java 8开始,有一个new date/time API,对于版本< = 7,有一个nice backport。在此API中,默认情况下格式化程序不宽松:
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("MM/yyyy");
YearMonth.parse("00/2000", fmt); // exception