【问题标题】:java.time.format.DateTimeParseException using DateTimeFormatterjava.time.format.DateTimeParseException 使用 DateTimeFormatter
【发布时间】:2018-11-19 06:56:34
【问题描述】:

我有这个代码:

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

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

【问题讨论】:

  • 什么是DateType.DATE_FORMAT

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    可能出了什么问题?

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

    出现此问题后,您的字符串中除了偏移量之外还包含一个时区名称,而格式化程序未告知该偏移量。

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

    【讨论】:

      猜你喜欢
      • 2017-05-31
      • 1970-01-01
      • 1970-01-01
      • 2022-11-12
      • 1970-01-01
      • 2017-02-18
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      相关资源
      最近更新 更多