Если пользователь должен просто ввести дату (например, 2019-03-31
), нет никаких причин, по которым ваша программа также должна интересоваться временем суток.Кроме того, ваш формат - ISO 8601, формат, который LocalDate
, а другие классы java.time анализируют (и также печатают) по умолчанию.Так что вам не нужен явный форматер.
Я понимаю, что вам нужна проверка диапазона, что, безусловно, желательно.Кроме того, если пользователь вводит совершенно другой формат, при синтаксическом анализе выдается DateTimeParseException
, который вы должны поймать и действовать соответственно.Например:
LocalDate minAcceptedDate = LocalDate.of(0, Month.JANUARY, 1);
LocalDate maxAcceptedDate = LocalDate.of(4000, Month.DECEMBER, 31);
Scanner keyboard = new Scanner(System.in);
System.out.println("Please enter Date : ");
while (true) {
String time = keyboard.next();
try {
LocalDate dateTime = LocalDate.parse(time);
if (dateTime.isBefore(minAcceptedDate) || dateTime.isAfter(maxAcceptedDate)) {
System.out.println("Please enter a date in the range " + minAcceptedDate + " through " + maxAcceptedDate);
} else { // OK
break;
}
} catch (DateTimeParseException dtpe) {
System.out.println("Please enter a date in format yyyy-mm-dd");
}
}
Пример сеанса:
Please enter Date :
Yesterday
Please enter a date in format yyyy-mm-dd
-001-12-30
Please enter a date in format yyyy-mm-dd
5000-12-12
Please enter a date in the range 0000-01-01 through 4000-12-31
2016-09-22