Instant vs LocalDateTime - 何时更喜欢一个而不是另一个

2022-09-01 20:55:20

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

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


答案 1

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

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

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

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

最后,如果您需要时刻以及它应该与哪个时区相关联,则可以使用ZonedDateTime或OffsetDateTime,它们将具有即时和时区信息。


答案 2

推荐