OffsetDateTime to ZonedDateTime - с определенным ZoneId - PullRequest
0 голосов
/ 31 января 2019

У нас есть класс DateTime, который мы создали для хранения datetime в нашей библиотеке.Значение обычно берется из базы данных SQL (поэтому UTC) или XML (может иметь смещение).Но это также может быть дата-время с явным часовым поясом (например, Денвер).

Внутри нашего класса мы держим это как OffsetDateTime, что я считаю лучшим, потому что в 98% случаев мы получаем явный момент сизвестное смещение и отсутствие зоны.

Когда он инициализируется с помощью ZonedDateTime, я думаю, что мы сохраняем его как OffsetDateTime и сохраняем ZoneId.Тогда, только для случая, когда нам нужен объект ZonedDateTime (преобразование в строку для отображения), если у нас есть ZoneId, примените его к OffsetDateTime.toZonedDateTime ().Таким образом, мы получаем «MST» вместо «-0700» для значения «z» при отображении в виде строки.

Как я могу создать ZonedDateTime с определенным ZoneId из OffsetDateTime?

1 Ответ

0 голосов
/ 31 января 2019

Решение конкретного вопроса, который вы задали;

ZoneId mst = ZoneId.ofOffset("UTC", ZoneOffset.ofHours(-7));
OffsetDateTime mstOffsetDateTime = OffsetDateTime.now(mst);
ZonedDateTime mstZonedDateTime = mstOffsetDateTime.atZoneSameInstant(mst);

Однако я не уверен, почему вы хотите сохранить свою метку времени в OffsetDateTime.Если вы отслеживаете ZoneId, вы можете сохранить временную метку в формате UTC и преобразовать ее в любой формат, какой пожелаете, в backend / frontend (или любом другом клиенте).Хранение даты и времени в формате UTC даст вам больше гибкости.

...