OffsetDateTime到ZonedDateTime-具有特定的ZoneId

时间:2019-01-31 13:48:23

标签: java java.time

我们创建了一个DateTime类,以将日期时间保存在我们的库中。该值通常来自SQL数据库(因此UTC)或XML(可以有偏移量)。但是它也可以是具有明确时区的日期时间(如丹佛)。

在我们的类中,我们将其保存为OffsetDateTime,我认为这是最好的,因为98%的时间中,我们会获得具有已知偏移量且无区域的显式瞬间。

当使用ZonedDateTime初始化它时,我想我们将其另存为OffsetDateTime并保存ZoneId。然后,仅在需要ZonedDateTime对象(转换为显示字符串)的情况下,如果我们具有ZoneId,请将其应用于OffsetDateTime.toZonedDateTime()。这样,在显示为字符串时,“ z”值将获得“ MST”而不是“ -0700”。

如何从OffsetDateTime创建具有特定ZoneId的ZonedDateTime?

1 个答案:

答案 0 :(得分:0)

您所提出的特定问题的解决方案;

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

但是,我不确定您为什么要在OffsetDateTime中保存时间戳。如果您跟踪ZoneId,则可以在UTC中保存时间戳,并在后端/前端(或任何其他客户端)中根据需要转换为任何格式。将日期时间存储为UTC将为您提供更大的灵活性。