Текст не может быть проанализирован по индексу 33 - PullRequest
0 голосов
/ 24 октября 2018

Я работаю над библиотекой ThreeTenABP для разбора даты и времени.Тем не менее, это сбой.API, который я использую, отправляет DateTime как;

2018-10-20T14: 27: 47.3949709 + 03: 00

Это способ, которым я пытаюсь выполнить синтаксический анализ;

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
                .append(DateTimeFormatter.ISO_OFFSET_DATE_TIME)
                .append(DateTimeFormatter.ofPattern("yyyy-MM-dd"))
                .toFormatter();

Timber.d(LocalDateTime.parse("2018-10-20T14:27:47.3949709+03:00", formatter).toString());

Я получаю сообщение об ошибке ниже:

Текст '2018-10-20T14: 27: 47.3949709 + 03: 00' не может быть проанализирован с индексом 33

Заранее спасибо.

1 Ответ

0 голосов
/ 24 октября 2018

Объяснение сообщения об ошибке:

2018-10-20T14:27:47.3949709+03:00 имеет длину 33 символа, поэтому

Text '2018-10-20T14: 27: 47.3949709+03: 00 'не удалось проанализировать по индексу 33

означает, что ожидается 34-й символ, которого там нет (он проиндексирован 0).

Проблема

То, как вы определили Formatter, которое будет принимать 2018-10-20T14: 27: 47.3949709 + 03: 002018-10-20`

Решение:

Чтобы преодолеть это, вы можете либо опустить .append(DateTimeFormatter.ofPattern("yyyy-MM-dd")

, либо определить Formatter, который принимает оба формата, с startOptional и endOptional

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
    .optionalStart()
    .append(DateTimeFormatter.ISO_OFFSET_DATE_TIME)
    .optionalEnd()
    .optionalStart()
    .append(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"))
    .optionalEnd().toFormatter();

Вы можете увидеть пример, работающий на https://ideone.com/RDVHYG

Примечание : "yyyy-MM-dd" не дает достаточно информации для LocalDateTime, поэтому я добавил"ЧЧ: мм"

...