我发现了很好的功能,它验证了日期的格式和正确性String
。我想升级它只验证>= 1900
年。在Java中验证日期字符串时出现异常
所以这是我发现:
public boolean isDateValid(String date) {
try {
DateFormat df = new SimpleDateFormat("dd-MM-yyyy");
df.setLenient(false);
df.parse(date);
return true;
} catch (ParseException e) {
return false;
}
}
这是我的升级版:
public boolean isDateValid(String date) {
try {
DateFormat df = new SimpleDateFormat("dd-MM-yyyy");
df.setLenient(false);
df.parse(date);
Integer year = Integer.parseInt(date.substring(6, 10));
if (year>= 1900)
return true;
else
return false;
} catch (ParseException e) {
return false;
}
}
所以不是返回true我检查,如果year
变量大于或等于1900问题是我用"12-12-1xxx"
(编辑或"12-12-1abc"
)运行此功能。在解析年份String
至int
时抛出NumberFormatException
。这绝对不应该发生,因为ParseException
应该先抛出,打破try {}
块。
它看起来像从第一个清单验证不能正常工作,因为它接受每个"yyyy"
部分以数字开头。然而,一切工作正常"12-12-xxxx"
(编辑或"12-12-abcd"
)。
编辑:
停止投票了我的问题,而你正在阅读的焦点。问题很明显:为什么新的SimpleDateFormat(“dd-MM-yyyy”)。parse(“12-12-1xxx”)不会抛出ParseException?
这是我的系统上工作正常,请检查您的输入,并使用最新的JDK –
我可以发布一个快照(只是作为答案),但它没有任何意义,所以检查任何无效输入 –
是的,它也在我的系统上工作。 –