无法转换String" rejectedDate":" 2018-03-29"到ZoneDate时间格式

时间:2018-04-05 12:46:18

标签: java datetime java-8 datetime-parsing

  

java.time.format.DateTimeParseException:Text' 2018-03-29 16:15:30'   无法在索引10处解析

max

1 个答案:

答案 0 :(得分:1)

您使用模式“yyyy-MM-dd”(年 - 月 - 日)创建了DateTimeFormatter,但您的输入还包含“hours:minutes:seconds”(2018-03-29 16:15:30)。< / p>

但即使你使用了正确的模式,这仍然会引发异常:

// now the pattern matches the input
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
OffsetDateTime date = OffsetDateTime.parse("2018-03-29 16:15:30", fmt); // DateTimeParseException

那是因为OffsetDateTime也需要UTC偏移,而输入没有它。你有一些选择:

  1. 将其解析为LocalDateTime

    DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    LocalDateTime date = LocalDateTime.parse("2018-03-29 16:15:30", fmt);
    
  2. 如果你真的需要OffsetDateTime,你必须为它选择一些偏移量。例如:

    LocalDateTime date = // parse the LocalDateTime as above
    
    // use offset +02:00
    OffsetDateTime odt = date.atOffset(ZoneOffset.ofHours(2));
    
  3. 或者您可以在格式化程序中设置默认值:

    DateTimeFormatter fmt = new DateTimeFormatterBuilder()
        // date/time pattern
        .appendPattern("yyyy-MM-dd HH:mm:ss")
        // use some offset as default (0 is UTC)
        .parseDefaulting(ChronoField.OFFSET_SECONDS, 0)
        .toFormatter();
    OffsetDateTime odt = OffsetDateTime.parse("2018-03-29 16:15:30", fmt);