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