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 даст вам больше гибкости.