2017-01-23 8 views
-2

Предположим, у меня есть дата в формате ISO 8601: "2017-01-10T14:55:32+01:00".Преобразование ISO 8601 timestamp String в java.time.OffsetDateTime

Как его преобразовать в OffsetDateTime?

Я не нашел здесь ответа. Я пробовал:

public OffsetDateTime stringToOffsetDateTime() { 
     return OffsetDateTime.from(Instant.parse("2019-12-12T10:39:40-02:00")); 
    } 

Но он бросает DateTimeParseException.

+3

'OffsetDateTime.parse ("2017-01-10T14: 55: 32 + 01: 00", DateTimeFormatter.ISO_DATE_TIME)' –

+0

Я не понимаю downvotes - просьба представить замечания, как я могу улучшить вопрос – kiedysktos

+1

Lemme угадать , downvotes может быть потому, что вы не показали усилий; как правило, мы ожидаем, что лучшая попытка искателя в вопросе, это действительно лучшая отправная точка для помощи. Теперь вы положили его в ответ. :-) –

ответ

0

Самый короткий ответ:

OffsetDateTime.parse("2017-01-10T14:55+01:00") 

Он распознает формат ISO 8601 по умолчанию (с использованием DateTimeFormatter.ISO_DATE_TIME).

При необходимости, вы можете использовать другие formaters таким образом:

OffsetDateTime.parse(iso8601String, DateTimeFormatter.ISO_OFFSET_DATE); 

Все formaters могут быть просмотрены здесь: https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html

Попытка из ОП не удалось, потому что использовали форматировщик от Instant. Это, естественно, не получилось, потому что Instant всегда в UTC, так что, даже если возможно, вы потеряете информацию о часовом поясе.

Смежные вопросы