Как исправить «Исключение синтаксического анализа даты и времени» в 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)

Каков ваш вклад?

MC Emperor 08.04.2019 15:05

Каково точное содержание temp?

user11044402 08.04.2019 15:05

Таким образом, содержимое temp всегда будет датой рождения пользователя, например, 27/01/2000.

Chornologic 08.04.2019 15:06
д /MM/гггг? Как насчет дат, отличных от 1-9?
Lino 08.04.2019 15:06

О да, только что заметил эту опечатку, обновленный вопрос

Chornologic 08.04.2019 15:07

Это работает в моей среде... Пожалуйста, покажите нам трассировку стека и ввод, вызвавший Exception.

deHaar 08.04.2019 15:08

Я предполагаю, что перед строками, которые вы нам показали, есть что-то вроде scan.nextInt() или что-то в этом роде. Вот почему нам нужен минимальный воспроизводимый пример, а не несколько строк кода.

RealSkeptic 08.04.2019 15:11

@RealSkeptic Я обновил вопрос полным методом.

Chornologic 08.04.2019 15:12

Ваш код на самом деле не использует созданную вами переменную format.

RealSkeptic 08.04.2019 15:15
LocalDate.parse(temp, format)
Lino 08.04.2019 15:16

@RealSkeptic в коде до обновления вопроса определенное DateTimeFormatter использовалось правильно. Впрочем, в этом причина (здесь/сейчас), скорее всего.

deHaar 08.04.2019 15:18
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
11
1 384
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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);
}
Ответ принят как подходящий

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

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

LocalDate date = LocalDate.parse(temp);

…к этому:

LocalDate date = LocalDate.parse(temp, format);

Другие вопросы по теме