public OrderDate(String date) throws IllegalDateFormatException {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/mm/yy");
try {
dateFormat.parse(date);
this.date = date;
} catch (ParseException e) {
throw new IllegalDateFormatException("Date must have the following format: dd/mm/yy");
}
}
如果我使用例如32/05/12 - 它不会抛出异常。
我也尝试过:Date givenDate = dateFormat.parse(date);
需要澄清。
更新
public OrderDate(String date) throws IllegalDateFormatException
{
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/mm/yy");
try
{
dateFormat.setLenient(false);
dateFormat.parse(date);
this.date = date;
}
catch(ParseException e)
{
throw new IllegalDateFormatException("Date must have the following"
+ " format: dd/mm/yy");
}
}
它捕获异常,如果日期是32/06/12!同时,如果日期是2003年6月31日,则没有任何问题。但是六月有30天了!
答案 0 :(得分:1)
默认情况下,setLenient
的{{1}}为SimpleDateFormat
。因此,无论何时解析true
,它都会自动转换为32/05/12
。这就是为什么不会抛出异常的原因。如果您需要严格解析而不是使用01/06/12
,则会在上述情况下抛出setLenient(false)
。查看docs。
指定日期/时间解析是否宽松。同 宽松解析,解析器可以使用启发式来解释输入 与该对象的格式不完全匹配。通过严格的解析, 输入必须与此对象的格式匹配。