我發現了很好的功能,它驗證了日期的格式和正確性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 –
我可以發佈一個快照(只是作爲答案),但它沒有任何意義,所以檢查任何無效輸入 –
是的,它也在我的系統上工作。 –