java.time.format.DateTimeParseException 使用 DateTimeFormatter

java.time.format.DateTimeParseException using DateTimeFormatter

我有这个代码:

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

据我了解,这是格式化程序的问题。有什么问题吗?

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

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

What could be wrong?

我会说,无论您在索引 10 处找到什么,如错误消息所述。 'T' 出了什么问题。因为你从未在你的 DATE_FORMAT 中提到过一个,所以你有一个 space 而不是。

在这个问题之后,你会遇到这样的问题,即你的字符串除了偏移量之外还包含一个时区名称,而你的格式化程序没有被告知。

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