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

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


person Bax    schedule 07.10.2016    source источник
comment
Пожалуйста, опубликуйте исключение и значение строки s для завершения.   -  person Mark Rotteveel    schedule 08.10.2016


Ответы (1)


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

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

person greg-449    schedule 08.10.2016
comment
Или замените h на H. (24-часовой формат) - person Meno Hochschild; 09.10.2016