我有这段代码将一个big-endian-date字符串解析为Date:
public static final Date fromBigEndian(String dateBigEndian) {
DateFormat bigEndianFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
return bigEndianFormat.parse(dateBigEndian);
} catch (ParseException e) {
return null;
}
}
和这个测试用例:
@Test
public void returnNullIfDoesNotMatchBigEndianFormat() {
String nonBigEndianDate = "01-06-2016";
Date parsedDate = DateUtil.fromBigEndian(nonBigEndianDate);
assertNull(parsedDate);
}
但它失败了。它返回的是Date而不是null,但"01-06-2016"
的格式与模式"yyyy-MM-dd"
不匹配。为什么该方法不会抛出ParseException
?
答案 0 :(得分:4)
您应该使用DateFormat.setLenient(false)
:
public static final Date fromBigEndian(String dateBigEndian) {
DateFormat bigEndianFormat = new SimpleDateFormat("yyyy-MM-dd");
bigEndianFormat.setLenient(false);
try {
return bigEndianFormat.parse(dateBigEndian);
} catch (ParseException e) {
return null;
}
}
现在它将抛出ParseException
public void setLenient(boolean lenient)
指定日期/时间解析是否宽松。同 宽松解析,解析器可以使用启发式来解释输入 与该对象的格式不完全匹配。通过严格的解析, 输入必须与此对象的格式匹配。