Как исправить исключение синтаксического анализа даты и времени в Java

У меня есть средство форматирования даты и времени, которое я пытаюсь отформатировать введенные даты в формат (d / MM / yyyy), показанный ниже

DateTimeFormatter format = DateTimeFormatter.ofPattern("dd/MM/yyyy");

Затем я использую этот форматировщик, чтобы вводить данные пользователя о дате рождения в виде строки, а затем пытаюсь проанализировать это, чтобы сохранить как переменную LocalDate с временным хранением введенной пользователем даты рождения

public void addCustomer() throws ParseException {
        customerID++;
        //Create Scanner
        Scanner scan = new Scanner(System.in);

        //Take user input
        System.out.println("Please enter your name: ");
        String name = scan.nextLine();
        System.out.println("Please enter your Date of Birth(dd/MM/yyyy): ");
        String temp = scan.nextLine();
        LocalDate date = LocalDate.parse(temp);
        Customer c = new Customer(customerID, name, date, false, "N/A");
        customers.add(c);
    }

Однако это всегда возвращает исключение DateTimeParseException: текст не удалось проанализировать. Проблема в том, как я настраиваю средство форматирования даты и времени, чтобы всегда вызывать это исключение? Показано ниже

Exception in thread "main" java.time.format.DateTimeParseException: Text '27/01/1999' could not be parsed at index 0
    at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2046)
    at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1948)
    at java.base/java.time.LocalDate.parse(LocalDate.java:428)
    at java.base/java.time.LocalDate.parse(LocalDate.java:413)
    at BikeNow.addCustomer(BikeNow.java:153)
    at BikeNow.main(BikeNow.java:98)

person Chornologic    schedule 08.04.2019    source источник
comment
Каков ваш вклад?   -  person MC Emperor    schedule 08.04.2019
comment
Каково точное содержание temp?   -  person    schedule 08.04.2019
comment
Таким образом, содержание temp всегда будет датой рождения пользователя, например, 27.01.2000.   -  person Chornologic    schedule 08.04.2019
comment
д / ММ / гггг? А что насчет дат кроме 1-9?   -  person Lino    schedule 08.04.2019
comment
Ах да, только что заметил эту опечатку, обновленный вопрос   -  person Chornologic    schedule 08.04.2019
comment
Это работает в моей среде ... Пожалуйста, покажите нам трассировку стека и ввод, вызвавший ошибку Exception.   -  person deHaar    schedule 08.04.2019
comment
Я предполагаю, что перед строками, которые вы нам показали, есть какой-то scan.nextInt() или что-то в этом роде. Вот почему нам нужен минимальный воспроизводимый пример, а не всего несколько строк кода.   -  person RealSkeptic    schedule 08.04.2019
comment
@RealSkeptic Я обновил вопрос полным методом   -  person Chornologic    schedule 08.04.2019
comment
В вашем коде фактически не используется созданная вами переменная format.   -  person RealSkeptic    schedule 08.04.2019
comment
@RealSkeptic в коде перед обновлением вопроса определенное значение DateTimeFormatter использовалось правильно. Однако, скорее всего, это причина (здесь / сейчас).   -  person deHaar    schedule 08.04.2019


Ответы (2)


Передайте свой DateTimeFormatter объект.

Измените это:

LocalDate date = LocalDate.parse(temp);

…к этому:

LocalDate date = LocalDate.parse(temp, format);
person Ros5292    schedule 08.04.2019

Я думаю, что вы забыли параметр, вот исправление:

public void addCustomer() throws ParseException {
        customerID++;
        //Create Scanner
        Scanner scan = new Scanner(System.in);

        //Take user input
        System.out.println("Please enter your name: ");
        String name = scan.nextLine();
        System.out.println("Please enter your Date of Birth(dd/MM/yyyy): ");
        String temp = scan.nextLine();

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
        LocalDate date = LocalDate.parse(temp, formatter);
        Customer c = new Customer(customerID, name, date, false, "N/A");
        customers.add(c);
}
person Vinh Can Code    schedule 08.04.2019