Пользовательский формат для java.time.LocalDate выбрасывает исключение DateTimeParseException
Я хотел бы разобрать формат даты YYYY-MM-DD на следующий MMM dd, yyyy. Это моя часть кода, которая вызывает исключение DateTimeParseException ->
DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("MMM dd, yyyy"); LocalDate localDate = LocalDate.parse("2002-10-01",dateTimeFormatter1);
Сообщение об исключении, когда я пытаюсь разобрать дату в заданном формате:
Method threw 'java.time.format.DateTimeParseException' exception. Text '2002-10-01' could not be parsed at index 0.
2 ответа
Ваше исключение было вызвано указанным вами форматом синтаксического анализа
"MMM dd, yyyy"
не соответствует вводу
2002-10-01
.
Мне нужно было бы иметь его как объект LocalDate в формате MMM dd, yyyy
A не имеет «формата». Текст имеет формат, но не текст.
Класс может анализировать входящую строку для создания объекта. И объект может генерировать строку, представляющую его значение. Но сам объект не является ни одной из этих строк.
LocalDate
имеет собственное внутреннее представление даты, детали которого нас не интересуют.
Ты сказал:
Я хотел бы разобрать формат даты ГГГГ-ММ-ДД
Этот формат соответствует стандарту ISO 8601. В java.time классы используют эти стандартные форматы по умолчанию при разборе / генерации текста. Таким образом, нет необходимости указывать шаблон форматирования.
LocalDate ld = LocalDate.parse( "2002-10-01" ) ;
Ты сказал
… В следующий MMM dd, yyyy.
Как правило, лучше позволить java.time автоматически локализовать, а не жестко кодировать определенный формат.
Locale locale = Locale.US ;
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( FormatStyle.MEDIUM ).withLocale( locale ) ;
String output = ld.format( f ) ;
Это потому что
2002-10-01
находится в формате
YYYY-MM-DD
, поэтому пытаясь проанализировать (т.е. преобразовать его в объект LocalDate) его с форматом
MMM dd, yyyy
не будет работать.
Для этого вам понадобятся два формата:
DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ofPattern("MMM dd, yyyy");
LocalDate localDate = LocalDate.parse("2002-10-01",dateTimeFormatter1);
String newRepresentation = dateTimeFormatter2.format(localDate);
System.out.println(newRepresentation);