Java 8 DateTimeFormatter无法解析自己格式化的日期

时间:2016-10-07 23:13:00

标签: 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

2 个答案:

答案 0 :(得分:5)

由于你已经为12小时时钟指定了hh(小写h),你已经丢失了关于这是否是AM / PM的信息,所以解析就是在抱怨。

使用yyyy-MM-dd hh:mm:ss a Z包含AM / PM指示符。

答案 1 :(得分:0)

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

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