java.time.format.DateTimeParseException: текст не может быть проанализирован по индексу 20
java.time.format.DateTimeParseException: текст «2020-08-21T14:00:00.00+0700» не может быть проанализирован в исключении индекса 20, полученном для кода ниже.
ZonedDateTime.parse(iso8601DateString, "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
он работал в Java 11, но получил исключение в Java 17.
2 ответа
Я рекомендую вам использовать следующиеDateTimeFormatter
который может служить для различного количества цифр в долях секунды . Это также будет работать, когда часть секунды (и, следовательно , доля секунды ) отсутствует.
DateTimeFormatter dtf = new DateTimeFormatterBuilder()
.append(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
.appendPattern("Z")
.toFormatter(Locale.ENGLISH);
В качестве альтернативы вы можете использоватьDateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSZ", Locale.ENGLISH)
но это относится только к данной строке даты и времени.
Демо :
class Main {
public static void main(String[] args) {
String strDateTime = "2020-08-21T14:00:00.00+0700";
// Recommended
DateTimeFormatter dtf = new DateTimeFormatterBuilder()
.append(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
.appendPattern("Z")
.toFormatter(Locale.ENGLISH);
OffsetDateTime odt = OffsetDateTime.parse(strDateTime, dtf);
System.out.println(odt);
// Alternatively,
dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSZ", Locale.ENGLISH);
odt = OffsetDateTime.parse(strDateTime, dtf);
System.out.println(odt);
}
}
Выход :
2020-08-21T14:00+07:00
2020-08-21T14:00+07:00
Узнайте больше о современном API Date-Time от Trail: Date Time.
Сработало с 2020-08-21T14:00:00.000+0700, миллисекунды должны быть трехзначными (000)