2016-10-07 2 views
2
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 8 DateTimeFormatter не может разобрать дату, отформатированную себя

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

+1

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

ответ

4

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

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

+2

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

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

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