Java 8 DateTimeFormatter не может проанализировать дату, отформатированную самостоятельно

#java #java-8 #java-time

#java #java-8 #java-time

Вопрос:

 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss z");
ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(Instant.now(), ZoneId.systemDefault());
// 2016-10-10 09:28:45 PDT
String s = zonedDateTime.format(formatter);
// this call fails
ZonedDateTime.parse(s, formatter);
  

Что не так с данным фрагментом, не formatter.parse(date.format(formatter)) следует оценивать одинаково date ?
Исключение :

java.time.Исключение DateTimeException: невозможно получить LocalTime из TemporalAccessor: {MilliOfSecond = 0, MicroOfSecond = 0, HourOfAmPm = 9, MinuteOfHour = 28, NanoOfSecond = 0, SecondOfMinute = 45}, ISO,America / Los_Angeles разрешен до 2016-10-10 типа java.time.format.Parsed

Комментарии:

1. Пожалуйста, отправьте исключение и значение строки s, чтобы оно было полным.

Ответ №1:

Поскольку вы указали hh (нижний регистр h) для 12-часовых часов, вы потеряли информацию о том, является ли это AM / PM, поэтому синтаксический анализ жалуется на это.

Использование yyyy-MM-dd hh:mm:ss a Z для включения индикатора AM / PM работает.

Комментарии:

1. Или замените «h» на «H». (24-часовые часы)

Ответ №2:

 java.time.ZonedDateTime.parse("2016-10-10T09:28:45-07:00");

java.time.LocalDate.parse("2016-10-10");