timestamp 与数据库 postgres 中的 timestamptz

问题描述 投票:0回答:1

在创建系统后端时,我总是将时间存储在 UTC 中,即客户端发送任何日期时间时,我限制只接受 UTC 日期时间,客户端将其本地日期时间转换为 UTC,然后使用API。

然后我将 utc 日期时间存储到数据库中,我从不关心时区。然后,当用户询问日期时间时,我给他们我存储的 UTC 时间,然后他们将其转换回本地时区,这对我来说看起来很棒。

我的问题是,

  1. 为什么我需要在数据库中存储时区?
  2. 我还需要存储时区的现实世界用例是什么,而不仅仅是 UTC?
  3. 我可以探索的任何资源都可以详细解释我何时使用哪种方法?
javascript node.js postgresql express
1个回答
0
投票

这些类型的命名令人困惑。类型

timestamptz
在数据库中存储时区。它仅意味着“我将接受输入中的时区并在存储中转换为 UTC”和“当您请求时,我将返回转换为设置时区的 UTC 数据。”

文档在时间戳部分解释了这一点,但顶部的表格实际上根本没有说清楚,这是一个常见的困惑。

所以两者都不能用来存储实际的时区信息。

至于何时需要存储时区,日历应用程序是一件大事。想象一下,您在每周二 14 点在一个实行夏令时的地点有个约会。除非你说出时区并且可以在必要时正确转换为其他时区,否则你怎么知道每周二的 14 点是多少?仅仅保存 UTC 就意味着半年已经结束了。

使用哪个?

timestamptz
经常被推荐,例如 Npgsql 库指出这是最好的方法。这听起来很奇怪,因为“我只想要没有时区的 UTC”,但这正是该类型带来的 - 无论命名如何。

© www.soinside.com 2019 - 2024. All rights reserved.