Преобразовать время со смещением в UT C и вернуть localdatetime - PullRequest
1 голос
/ 14 января 2020

У меня есть метод, который анализирует строку в соответствии с Iso8601 и возвращает LocalDateTime. Теперь я принимаю возможные смещения. Проблема теперь в том, что мне нужно преобразовать смещение в UT C и вернуть его как LocalDateTime.

До сих пор я пытался работать с Instant, OffsetDateTime, ZonedDateTime. Я всегда получаю обратное. Вместо +06: 00 мой результат будет отображаться как -06: 00.

return LocalDateTime.ofInstant(Instant.from(OffsetDateTime.parse(date, buildIso8601Formatter())), ZoneOffset.UTC);

Это решение работает так же, как и мои другие опробованные, которые я упоминал выше.

Я знаю, что это не обычный способ сделать это, и я провел много исследований из-за этого, но текущая архитектура позволяет мне делать это только так.

РЕДАКТИРОВАТЬ пример: с реализация, подобная этой:

OffsetDateTime offsetDateTime = OffsetDateTime.parse(date, buildIso8601Formatter()); 
Instant instant = offsetDateTime.toInstant();


return LocalDateTime.ofInstant(instant, ZoneOffset.UTC);

Допустим, я получаю "2020-01-12T08:30+06:00" в качестве ввода для моего метода. Я должен вернуть LocalDateTime.

В результате я хочу получить "2020-01-12T14:30", вместо этого, моим лучшим решением было получить противоположный путь: "2020-01-12T02:30".

1 Ответ

4 голосов
/ 14 января 2020

Поведение java.time является правильным. Строка 2020-01-12T08:30+06:00 означает, что часть datetime этой строки является datetime local для некоторого региона, который существует в области со смещением +06:00 от UT C.

* 1007. * Ваша интерпретация отличается от вышеупомянутого случая. В вашем случае вы интерпретируете 08:30 как синхронизированное время c с UT C, а затем объединяете строку смещения часового пояса для нужного региона.

Так что если вы действительно хотите это сделать - Подумайте еще раз.


Одним из способов достижения этого является простой анализ даты и времени как смещения даты и времени, а отрицание смещения.

...