Пользовательский формат для 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);
Другие вопросы по тегам