node.js - 处理 UTC 日期和 future

标签 node.js postgresql date timezone

我刚刚发现,存储 dates in utc如果我们还处理 future 的日期,则不太正确。情况似乎如此,因为 timezones seem to change比我们想象的更频繁。幸运的是,我们似乎有IANA tzdb似乎会定期更新,但是令人困惑的是,postgres 似乎使用特定版本 of the db which it seems to have at build time. .

所以,我的问题是,如果时区正在变化,夏令时正在进行,政治、地理发生调整,并且我们的数据库不是最新的 tzdb,我们如何能够跟踪系统中日期的准确性?此外,图书馆会喜欢 date-fns-tz基本上不能准确地解释新的时区变化?

理想情况下,我认为图书馆会对中央服务器进行网络调用,以维护最新的更改,但是,情况似乎并非如此。通常如何处理最新的日期/时区更改?

最佳答案

IANA 时区数据库收集有关世界各地何时有效的时区的全局知识。这些信息自然是不完整的,特别是当涉及到 future 时。 (IANA) 时区不是相对于 UTC 的偏移量,而是一条规则,规定相对于 UTC 的偏移量何时有效。从这个意义上来说,EST 并不是一个时区,它是某个 UTC 偏移量的缩写。如果您住在纽约,有时会是 EST,有时是 EDT,具体取决于 America/New_York 时区的规则。当然,您应该更新时区数据库,但这不是因为时间戳发生变化(它们是不可变的),而是因为时间戳在某个时区的显示方式可以改变。

数据库中存储的始终是 UTC 时间戳,因此时间戳本身是不可变的。改变的是代表性。因此,如果您预测世界将于明年 7 月 15 日中午奥地利时间结束,并且奥地利政府废除夏令时,那么您的预测将推迟一个小时(除非您预计灾难会遵循奥地利立法)。如果您担心这一点,请以 UTC 进行预测,或者至少将 UTC 偏移量添加到时间戳中。

如果您将带有时区的时间戳存储在数据库中,并且今天将时区设置为欧洲/维也纳来查询它,那么您就会得到一定的结果。如果您更新时区数据库,并且新法规反射(reflect)在更新中,那么明天相同的查询将返回不同的结果。但是,它仍然是相同的时间戳,只是使用的 UTC 偏移量不同:

SELECT TIMESTAMP WITH TIME ZONE '2023-07-15 12:00:00+02'
     = TIMESTAMP WITH TIME ZONE '2023-07-15 11:00:00+01';

 ?column? 
══════════
 t
(1 row)

关于node.js - 处理 UTC 日期和 future ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74753559/

相关文章:

javascript - 带有 express Node js 服务器的 XMLhttpRequest

node.js - 我的 typescript 编译器有什么问题? `tsc --version` 什么都不返回

sql - PostgreSQL 9.3 - 如何使用 json_populate_recordset 插入但仍然按序列获取自动 ID

javascript - 设置用户输入日期的格式。

iphone - 如何使用日期对表格单元格上的行内容进行排序

node.js - Node 和 npm 的问题

javascript - 停止 Node Webkit 在未聚焦/最小化时暂停

java - MyBatis 3.1.1,如何直接执行自定义SQL代码

postgresql - 需要查询帮助

php - 如何查找给定月份的周日期范围