DateTimeParseException-无法在索引0处解析

时间:2020-02-26 11:57:46

标签: java date-parsing java-time

我正在尝试解析以下日期"Wed, 26 Feb 2020 03:42:25 -0800"

String datePattern = "EEE, dd MMM yyyy HH:mm:ss Z";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(datePattern);
ZonedDateTime zonedDateTime = ZonedDateTime.parse(dateStr, formatter);

但是我收到以下错误消息:

java.time.format.DateTimeParseException: Text 'Wed, 26 Feb 2020 03:42:25 -0800'  
could not be parsed at index 0

谢谢

2 个答案:

答案 0 :(得分:4)

您需要提供使用日期Locale所使用的语言的String。否则,格式化程序将采用系统默认的语言环境。

请参见以下示例:

public static void main(String[] arguments) {
    String dt = "Wed, 26 Feb 2020 03:42:25 -0800";
    ZonedDateTime zdt = ZonedDateTime.parse(dt, 
            DateTimeFormatter.ofPattern("EEE, dd MMM yyyy HH:mm:ss Z", Locale.US));
    System.out.println(zdt.format(DateTimeFormatter.ISO_ZONED_DATE_TIME));
}

我的德语系统上的输出:

2020-02-26T03:42:25-08:00

如果没有这个Locale(也可能是UK),我得到的Exception与您所得到的相同。

添加
@Lino的要点是:要与国家/地区无关,请更好地使用Locale.ENGLISH,因为这样可以保留对语言的尊重,但不依赖于某个国家或地区的特定Locale

答案 1 :(得分:1)

不要为字符串找到正确的格式模式字符串和正确的语言环境而烦恼。格式化程序是内置的。

    String dateStr = "Wed, 26 Feb 2020 03:42:25 -0800";
    DateTimeFormatter formatter = DateTimeFormatter.RFC_1123_DATE_TIME;
    OffsetDateTime offsetDateTime = OffsetDateTime.parse(dateStr, formatter);

    System.out.println(offsetDateTime);

输出为:

2020-02-26T03:42:25-08:00

它也可以与ZonedDateTime一起使用,但是由于DateTimeFormatter.RFC_1123_DATE_TIME仅处理偏移量(例如偏移量或GMT),而不处理时区,因此我发现OffsetDateTime更合适。

DateTimeFormatter.RFC_1123_DATE_TIME始终希望使用星期几和月份的英文缩写,即使您明确指定了不同的语言环境也是如此,因为RFC表示该字符串是英文的。怎么可能出问题了?