gpt4 book ai didi

node.js - 处理 UTC 日期和 future

转载 作者:行者123 更新时间:2023-12-02 17:59:36 25 4
gpt4 key购买 nike

我刚刚发现,存储 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/

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