使用DateTimeFormatter的java.time.format.DateTimeParseException

时间:2018-06-09 11:25:09

标签: java datetime java-time datetime-parsing zoneddatetime

我有这段代码:

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
        .appendPattern(DateType.DATE_FORMAT)
        .appendOffset("+HH:mm", "+00:00")
        .toFormatter();
ZonedDateTime.parse("2018-06-09T14:09:30.020+03:00[Europe/Tallinn]", formatter);

DateType.java

public class DateType {

    public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
    public static final String DATE_TIME_ZONE_FORMAT = DATE_FORMAT + "XXX";
}

但是,我运行此代码,我有错误:

java.time.format.DateTimeParseException: Text '2018-06-09T14:09:30.020+03:00[Europe/Tallinn]' could not be parsed at index 10

据我了解,这是因为格式化程序。可能有什么不对?

2 个答案:

答案 0 :(得分:3)

我想知道为什么你没有尝试默认解析器。我认为它按预期工作。

String dateTime = "2018-06-09T14:09:30.020+03:00[Europe/Tallinn]";
ZonedDateTime z = ZonedDateTime.parse(dateTime);
System.out.println(z);

答案 1 :(得分:2)

  

可能出现什么问题?

我会说,无论你在索引10找到什么,正如错误信息所说的那样。 'T'是错的。因为你从来没有在DATE_FORMAT中提到过,所以你有空格。

在出现此问题之后,您会遇到以下问题:除了偏移量之外,您的String还包含时区名称,格式化程序未通知该名称。

正如另一个答案所说,这些问题可以通过依赖默认解析器来解决,因为他们理解这种格式。