关于java:OffsetDateTime到ZonedDateTime – 具有特定的ZoneId

OffsetDateTime to ZonedDateTime - with specific ZoneId

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

在我们的课程中,我们认为这是一个OffsetDateTime,我认为这是最好的,因为98%的时间我们得到一个已知偏移的明确瞬间,没有区域。

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

如何使用OffsetDateTime中的特定ZoneId创建ZonedDateTime?


解决您提出的具体问题;

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

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