Разбор даты с +0000 и T

У меня возникли проблемы с анализом следующей даты в объекте LocalDate.

2017-11-10T14:17:38.611+0000

Я пробовал следующее:

LocalDate date = LocalDate.parse(markitDate, DateTimeFormatter.BASIC_ISO_DATE)

но я получаю сообщение об ошибке, что буква T не может быть проанализирована.


person Crt    schedule 10.11.2017    source источник
comment
Сначала проверьте DateTimeFormatter. ISO_OFFSET_DATE_TIME. Он использует Z zone-offset offset-Z +0000; -0800; -08:00;   -  person AxelH    schedule 10.11.2017
comment
Я получаю сообщение об ошибке, говорящее, что индекс 23 не может быть проанализирован. индекс 23 - это символ +.   -  person Crt    schedule 10.11.2017


Ответы (3)


Способ сделать это явно, возможно, уже есть определенный шаблон, но сработало следующее:

LocalDateTime dateTime = LocalDateTime.parse(markitDate, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ"))
person Crt    schedule 10.11.2017

Согласно источникам DateTimeFormatter.BASIC_ISO_DATE:

 * The ISO date formatter that formats or parses a date without an
 * offset, such as '20111203'

и вы пытаетесь разобрать дату и время

person WeGa    schedule 10.11.2017
comment
все еще жалуется на символ T - person Crt; 10.11.2017

Потому что это не BASIC_ISO_DATE.

Взгляните на другие предопределенные средства форматирования и вы обнаружите, что ISO_OFFSET_DATE_TIME здесь правильный выбор. Используйте это так:

LocalDate date = LocalDate.parse(markitDate, DateTimeFormatter.ISO_OFFSET_DATE_TIME)
person f1sh    schedule 10.11.2017
comment
Жалуется на символ + сейчас. - person Crt; 10.11.2017
comment
Можете ли вы изменить свой ввод на 00:00 - person achAmháin; 10.11.2017
comment
Проблема не в +, а в смещении часового пояса. Должно быть 00:00 вместо 0000. - person f1sh; 10.11.2017
comment
Ввод из другой системы, которую я не могу изменить. - person Crt; 10.11.2017