我们创建了一个DateTime类,以将日期时间保存在我们的库中。该值通常来自SQL数据库(因此UTC)或XML(可以有偏移量)。但是它也可以是具有明确时区的日期时间(例如Denver)。
在我们的类中,我们将其保存为OffsetDateTime,我认为这是最好的,因为98%的时间中,我们会获得具有已知偏移量且无区域的显式瞬间。
当使用ZonedDateTime初始化它时,我认为我们将其另存为OffsetDateTime并保存ZoneId。然后,仅在需要ZonedDateTime对象(转换为显示字符串)的情况下,如果我们具有ZoneId,请将其应用于OffsetDateTime.toZonedDateTime()。这样,在显示为字符串时,对于“ z”值,我们得到的是“ MST”而不是“ -0700”。
如何从OffsetDateTime创建具有特定ZoneId的ZonedDateTime?
最佳答案
您所提出的特定问题的解决方案;
ZoneId mst = ZoneId.ofOffset("UTC", ZoneOffset.ofHours(-7));
OffsetDateTime mstOffsetDateTime = OffsetDateTime.now(mst);
ZonedDateTime mstZonedDateTime = mstOffsetDateTime.atZoneSameInstant(mst);
但是,我不确定为什么要将时间戳保存在
OffsetDateTime
中。如果您跟踪ZoneId
,则可以将时间戳记保存为UTC,并根据需要在后端/前端(或任何其他客户端)中转换为任何格式。将日期时间存储为UTC将为您提供更大的灵活性。关于java - OffsetDateTime到ZonedDateTime-具有特定的ZoneId,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54462037/