У меня есть средство форматирования даты и времени, которое я пытаюсь отформатировать вводимыми датами в формате (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)
Каково точное содержание temp?
Таким образом, содержимое temp всегда будет датой рождения пользователя, например, 27/01/2000.
О да, только что заметил эту опечатку, обновленный вопрос
Это работает в моей среде... Пожалуйста, покажите нам трассировку стека и ввод, вызвавший Exception.
Я предполагаю, что перед строками, которые вы нам показали, есть что-то вроде scan.nextInt() или что-то в этом роде. Вот почему нам нужен минимальный воспроизводимый пример, а не несколько строк кода.
@RealSkeptic Я обновил вопрос полным методом.
Ваш код на самом деле не использует созданную вами переменную format.
LocalDate.parse(temp, format)@RealSkeptic в коде до обновления вопроса определенное DateTimeFormatter использовалось правильно. Впрочем, в этом причина (здесь/сейчас), скорее всего.




Я думаю, что вы забыли параметр, вот исправление:
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);
Каков ваш вклад?