org.threeten.bp.format.DateTimeParseException - PullRequest
       67

org.threeten.bp.format.DateTimeParseException

0 голосов
/ 04 ноября 2019
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 ]

0 голосов
/ 05 ноября 2019

Поскольку 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

0 голосов
/ 05 ноября 2019

используйте LocalDate вместо LocalDateTime, например:

val begin = (LocalDate.parse("2019-11-04", dateFormatter).atOffset(ZoneOffset.UTC)
                .toInstant()).atZone(ZoneId.of(timeZoneIdentifier))

Но для этого вызова требуется min api 26. Для API более старых версий см. здесь

...