Java OffsetDateTime到ZoneDateTime-带有特定的ZoneId

Java OffsetDateTime到ZoneDateTime-带有特定的ZoneId,java,java-time,Java,Java Time,我们创建了一个DateTime类,用于在库中保存DateTime。该值通常来自SQL数据库(因此UTC)或XML(可以有偏移量)。但它也可以是带有明确时区的日期时间(如丹佛) 在我们的课堂上,我们把它作为OffsetDateTime,我认为这是最好的,因为98%的时间我们得到一个明确的时刻,有一个已知的偏移量,没有区域 当它用ZonedDateTime初始化时,我想我们应该将它保存为OffsetDateTime并保存ZoneId。然后,仅在需要ZonedDateTime对象(转换为字符串以显示)

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

在我们的课堂上,我们把它作为OffsetDateTime,我认为这是最好的,因为98%的时间我们得到一个明确的时刻,有一个已知的偏移量,没有区域

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


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

您所问特定问题的解决方案

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

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

不是您想要的吗?几行代码将比此长度解释更容易。我们是一个库,因此我们必须处理使用它的人对我们提出的问题。大多数设置UTC日期时间。但相当多的数据将我们的日期时间设置为偏移量。还有一些被设定为区域。我们必须处理所有案件。谢谢你的回答。