Instant vs LocalDateTime - 何时更喜欢一个

Instant vs LocalDateTime - When to prefer one over the other

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

什么时候我应该更喜欢一个?

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

假设事件发生在世界标准时间上午 8 点。

一旦你有了 LocalDateTime,你就失去了时区信息,它在技术上可以在任何时区 - 所以可能是世界标准时间上午 8 点或美国东部标准时间上午 8 点(= 世界标准时间下午 1 点)。这意味着您必须 "know" 您的惯例是 LocalDateTime 实际上是 UTC 时刻。

如果您使用 Instant,无论时区如何,您都可以准确知道所指的时间,并且不需要外部 "knowledge" 或约定。但是,您也没有时区信息,因此您不知道是英国时间上午 8 点,欧洲中部时间上午 9 点还是美国东部时间凌晨 3 点(但这些都代表同一时间)。

最后,如果您既需要时间点又需要它应该与哪个时区相关联,您可以使用 ZonedDateTime 或 OffsetDateTime,它们将包含 Instant 和时区信息。