OffsetDateTime to ZonedDateTime - с определенным ZoneId

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

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

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

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам