Arn*_*ner 7 javascript timezone zoneinfo
当我使用
在我的 ArchLinux 机器上,系统时间表现良好:
> date
Tue Oct 23 17:10:34 TAI 2018
> date -d @1483228827
Sun Jan 1 00:00:00 UTC 2017
> date -d @1483228826
Sat Dec 31 23:59:60 UTC 2016
> date -d @1483228825
Sat Dec 31 23:59:59 UTC 2016
Run Code Online (Sandbox Code Playgroud)
但是:JavaScript 不会:
-arne
JavaScriptDate对象特别遵循Unix 时间的概念(尽管精度更高)。这是 POSIX 规范的一部分,因此有时称为“POSIX 时间”。它不计算闰秒,而是假设每天正好有 86,400 秒。您可以在当前 ECMAScript 规范的第 20.3.1.1 节中阅读相关内容,其中指出:
时间在 ECMAScript 中以 UTC 时间 1970 年 1 月 1 日以来的毫秒为单位进行测量。在时间值中,闰秒被忽略。假设每天正好有 86,400,000 毫秒。
JavaScript 在这方面并不是独一无二的。这是绝大多数其他语言所做的,包括 Python、Ruby、.NET、time_tC 中的典型实现以及许多其他语言。
因为你已经改变了你的系统来跟踪 TAI 而不是 UTC,并且在你的系统上有一个date命令理解的闰秒表的实现,那么在你的系统time_t上不是一个 Unix 时间戳,而是一个基于 TAI 的变体伪装作为 Unix 时间戳。仅仅因为date命令和其他底层函数认识到这一点,并不意味着它会贯穿到您机器上的所有平台和运行时。
事实上,闰秒的不可预测性使得它们很难在 API 中使用。人们通常不能传递需要正确解释闰秒表的时间戳,并期望一个系统将它们解释为另一个系统。例如,当你的榜样时间戳1483228826是2017-01-01T00:00:00Z您的系统上,它会被解释为2017-01-01T00:00:26Z基于POSIX系统或系统没有闰秒表。所以它们不是便携式的。即使在具有完整更新表的系统上,也不知道这些表将来会包含什么(超过 6 个月的 IERS 公告期),因此我无法在没有最终更改的风险的情况下生成未来时间戳。
需要明确的是 - 为了在编程语言中支持闰秒,实现必须不遗余力地这样做,并且必须做出并不总是可以接受的权衡。虽然也有例外,但一般的立场是不支持它们——不是因为有任何颠覆或积极的反制措施,而是因为正确地支持它们要困难得多。
也就是说,如果你真的关心 JavaScript 中的闰秒,你就有希望。您可以将您的想法添加到TC39 Temporal 提案(我是其中的冠军之一)。这不会改变Date对象的行为- 已经烘焙并且已经存在了几十年。但是我们正在为 JavaScript 中的日期和时间开发一组新的标准对象,希望得到您的反馈和参与。有一个线程,我们一直在考虑各种方式让闰秒成为问题#54 中的一部分. 目前,我们还没有过多考虑基于 TAI 的系统。如果这是您有经验的领域,请在那里添加您的想法。请记住,我们需要在这与社区的一般需求之间取得平衡,但我们希望得到您的意见。谢谢!
| 归档时间: |
|
| 查看次数: |
866 次 |
| 最近记录: |