Instant vs LocalDateTime - 何时优先于另一个

时间:2016-02-07 07:40:13

标签: java java-8 java-time

我需要以UTC格式保存并显示我服务器中发生的事件的日期时间。 我可以选择使用Instant.now()或LocalDateTime.now(ZoneOffset.UTC)

我应该何时优先选择其中一个?

1 个答案:

答案 0 :(得分:17)

这取决于您想要对数据执行的操作。这两种类型在概念上是不同的。

想象一下事件发生在UTC时间早上8点。

一旦你有了LocalDateTime,你就丢失了时区信息,它在技术上可能在任何时区 - 所以可能是UTC时间早上8点或东部时间早上8点(= UTC时间下午1点)。这意味着您必须“知道”您的约定是LocalDateTime实际上是UTC时刻。

如果您使用即时消息,则无论时区如何,您都可以确切地知道什么时间被引用,并且不需要外部“知识”或惯例。但是,您没有时区信息,因此您不知道它是英国时间上午9点(欧洲中部时间)上午8点或美国东部时间凌晨3点(但这些都代表同一时刻)。

最后,如果你需要时间和它应该与哪个时区相关联,你可以使用ZonedDateTime或OffsetDateTime来获取Instant和时区信息。