org.threeten.bp.format.DateTimeParseException
val dateFormatter= DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd")
.toFormatter()
val begin = (LocalDateTime.parse("2019-11-04", dateFormatter).atOffset(ZoneOffset.UTC)
.toInstant()).atZone(ZoneId.of(timeZoneIdentifier))
Когда я пытаюсь разобрать дату таким образом, я получаю следующую ошибку:
Не удалось проанализировать текст '2019-11-04': невозможно получить LocalDateTime от TemporalAccessor: DateTimeBuilder[, ISO, null, 2019-11-04, null], введите org.threeten.bp.format.DateTimeBuilder
2 ответа
Использовать LocalDate
вместо LocalDateTime
, Нравится:
val begin = (LocalDate.parse("2019-11-04", dateFormatter).atOffset(ZoneOffset.UTC)
.toInstant()).atZone(ZoneId.of(timeZoneIdentifier))
Но для этого вызова требуется min api 26. Для более старых API см. Здесь
Поскольку 2019-11-04
это формат ISO 8601 и LocalDate
а другие классы java.time анализируют формат ISO 8601 по умолчанию, вам не нужно явное средство форматирования. Только это:
val begin = LocalDate.parse("2019-11-04")
.atStartOfDay(ZoneOffset.UTC)
.withZoneSameInstant(ZoneId.of(timeZoneIdentifier))
При условии, что timeZoneIdentifier
является Europe/Bucharest
в результате ZonedDateTime
из 2019-11-04T02:00+02:00[Europe/Bucharest]
.
Вы не можете разобрать свою строку в LocalDateTime
. Для этого потребуется не только дата, но и время суток, а, как вы знаете, ваша строка содержит только первое.
Ссылка: Статья в Википедии: ISO 8601