Разбор даты Scala с помощью java LocalDateTime
Я пытаюсь разобрать дату вроде этой "2020-07-01T00:00:00Z" с помощью java LocalDateTime
(в Scala) таким образом:
LocalDateTime.parse("2020-07-01T00:00:00Z", ISO_INSTANT)
но я получаю это исключение:
java.time.format.DateTimeParseException: Text '2020-07-01T00:00:00Z' could not be parsed: Unable to obtain LocalDate from TemporalAccessor
В чем может быть проблема?
это мои библиотеки:
import java.time.format.DateTimeFormatter._
import java.time.LocalDateTime
2 ответа
Вам необходимо указать зону, в которой LocalDateTime
относится к синтаксическому анализу.
LocalDateTime.parse("2020-07-01T00:00:00Z",
DateTimeFormatter.ISO_INSTANT.withZone(ZoneId.systemDefault()));
А LocalDateTime
не хранит информацию о зоне, но, абстрактно говоря, она так или иначе связана с ней. МножественныйLocalDateTime
s могут быть проанализированы из одной и той же метки времени UTC, т. е. смещение времени конкретной (локальной) зоны добавляется / вычитается.
Не поймите это неправильно с ZonedDateTime
. АZonedDateTime
хранит информацию о зоне, поэтому имеет отношение 1:1 к отметке времени UTC. Отметка времени в формате UTC имеет отношение 1:n кLocalDateTime
с.
Вы не должны использовать ISO_INSTANT
форматировщик, потому что он предназначен для синтаксического анализа Instant
s, пока вы хотите LocalDateTime
.
Вы должны использовать другой DateTimeFormatter
. Вот несколько вариантов. Все это "надмножества"ISO_INSTANT
формат.
В качестве альтернативы проанализируйте строку на Instant
будет первый:
instant.atZone(ZoneOffset.UTC).toLocalDateTime()