我正在尝试解析以下日期"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
谢谢
答案 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表示该字符串是英文的。怎么可能出问题了?