Как выдать сообщение об ошибке, когда пользователь вводит неверный формат даты в Java8 - PullRequest
0 голосов
/ 04 апреля 2019

Я хочу дать сообщение об ошибке, если пользователь вводит неверный формат.Правильный формат: «гггг-мм-дд чч: мм: сс».Как я могу поставить это как условие?

, например, если (yyyy <0) {sout ("пожалуйста, введите правильный год")} </p>

это код, который я использую для запроса пользователяи его форматирование

Scanner keyboard = new Scanner(System.in);
        String hour = "00:00:00";
        System.out.println("Please enter Date : ");
        String time = keyboard.next()+" "+ hour;
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime dateTime = LocalDateTime.parse(time, formatter);

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Вы можете использовать регулярное выражение:

while input doesn't match the regex pattern
     print "Please enter date in the correct format: yyyy-MM-dd HH:mm:ss"
continue with the rest of the code

Шаблон RegEx может быть:

\ d {4} - [01] \ d- [0-3] \ d [0-2] \ d: [0-5] \ d: [0-5] \ d (?:. \ d +)? Z?

Вы можете использовать этот сайт для создания и тестирования шаблонов RegEx

0 голосов
/ 05 апреля 2019

Если пользователь должен просто ввести дату (например, 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...