Вам необходимо предоставить 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
, потому что это сохраняет уважение к языку, но не зависит от специфики c Locale
страны или региона.