gpt4 book ai didi

java - 什么时候应该在数据库应用程序中使用 OffsetDateTime、ZonedDateTime 和 Instant?

转载 作者:行者123 更新时间:2023-12-05 01:58:09 25 4
gpt4 key购买 nike

java.time 的文档包装说:

Many applications can be written only using LocalDate, LocalTime andInstant, with the time-zone added at the user interface (UI) layer.

The offset-based date-time types OffsetTime and OffsetDateTime, areintended primarily for use with network protocols and databaseaccess.

因此,如果我想在数据库中保存某个事件的日期时间,例如将帖子评论添加到系统的时间,我应该使用 OffsetDateTime,而不是 ZonedDateTimeInstant?或者我应该使用 LocalDateTimeInstant?它是否取决于数据库访问技术,例如我使用 Hibernate 还是 JDBC?

在数据库应用程序中何时使用OffsetDateTimeZonedDateTimeInstant 是否有任何规则?

java.time 包的摘要对我来说不是很清楚。

最佳答案

我的建议是查看您需要事先了解哪些信息才能从一种类型转换为另一种类型,或者说,您丢失了哪些信息。

每种情况下的具体用途可能在很大程度上取决于信息的使用方式。

但是,一般来说:

  • Instant 仅存储自 1970-01-01T00:00:00Z 以来耗时,精度为纳秒。然后,您将能够将该时刻转换为任何时区中该时刻的确切日期,但时区未存储在此类中,这是未知的。例如,如果您需要排序、确定优先级、排队……时间,这可能是正确的类。
  • Local* 这些类与Instant 有点相反。假设您知道(但不存储)它是哪个时区,它们会存储特定的日期和时间。有了这些类(class),你不知道现在是什么时候! (除非有人告诉你它发生在哪个时区)。它们可用于存储时区已知的时间和日期,例如到达和离开机场、酒店……个人闹钟(例如,每天早上 8 点叫醒我;无论我身在何处)。
  • Offset* 从直观上理解起来有点复杂。它们就像一个 Instant,但也存储了我们在地球上的位置(不要与“时间使用”/时区混淆!)。地球上的时间从 -12h 到 +12h。 Instant 是 UTC(即 +0h),所以使用 InstantOffset* 有点类似,然而,这些类被广泛用于网络协议(protocol),因为给出 Instant 1628340379.718919021 比 2021-08-13T12:24:05.478482150+01:00 不太清楚。
  • Zoned* 存储尽可能多的信息,因为它们表示一个“时间使用”/timezone,也就是说,除了知道Instant,你还知道如何用户希望您根据本地的风俗习惯显示该日期。地球上的许多国家/地区都根据一年中的时间提前或拨回时钟。

没有 Elixir 规则,但非常普遍。如果您需要存储的信息(不要与您需要的显示方式混淆)是:

  • 及时了解某事何时发生或将在全局范围内发生(即,无论我们在地球上的哪个位置)。所以 Instant
  • 否则,一天、一周、一个月(例如每个星期二)中的时刻假设它们发生在我们所在的地方,但没有指定位置。然后我们使用Local*
  • 如果我们必须通过格式化协议(protocol)传输瞬间时间,我们可以使用 InstantOffset* 更合适。
  • 如果我们还必须存储我们将如何向用户呈现时间信息(每小时使用情况),那么我们将使用 Zoned*。但是我们很少使用这个类,因为我们通常对事情发生的瞬间感兴趣(全局 Instant 或本地 Local*),我们将格式化它根据其他偏好向用户提供。

仅作为示例,postgresql 不支持时区,那么,您必须存储或Local*Instant(或Offset*仅在 UTC 有什么不好),在任何情况下您都需要知道用户每小时的使用情况,但是,如果您没有定义时区(例如,您存储事件) Instant 会更好。

正如我所说,在不知道您的具体需求的情况下,很难说哪个更好。

关于java - 什么时候应该在数据库应用程序中使用 OffsetDateTime、ZonedDateTime 和 Instant?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68692237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com