Я нашел хорошую функцию, которая проверяет формат и правильность даты 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;
}
}
Таким образом, вместо того, чтобы вернуться правда я проверяю, если переменная year
больше или равна 1900 . Проблема заключается в том, что я запускаю эту функцию с помощью "12-12-1xxx"
(Редактировать: или "12-12-1abc"
). NumberFormatException
забрасывается во время разбора года String
до int
. Это определенно не должно произойти, потому что ParseException
следует выбросить первым, сломав блок try {}
.
Похоже, что подтверждение от первого листинга не работает должным образом, поскольку оно принимает каждую часть "yyyy"
, которая начинается с числа. Однако все работает нормально для "12-12-xxxx"
(Редактировать: или "12-12-abcd"
).
EDIT:
Стоп голосование вниз мой вопрос и сосредоточиться в то время как вы читаете. Вопрос очень ясен: почему новый SimpleDateFormat («dd-MM-yyyy»). Parse («12-12-1xxx») не бросает исключение ParseException?
он работает отлично на моей системе, проверьте введенные данные и использовать последнюю версию JDK –
я могу опубликовать снимок (только как ответ), но это не имеет смысла, поэтому проверьте наличие недопустимого ввода –
, да, он тоже работает над моей системой. –