【问题标题】:Daylight Saving Time in Javascript for 1974?1974 年 Javascript 中的夏令时?
【发布时间】:2011-01-06 23:18:05
【问题描述】:

“在“能源危机”年代,国会制定了更早的夏令时开始日期。1974 年,夏令时从 1 月 6 日开始,1975 年从 2 月 23 日开始。两年后,开始日期恢复到四月的最后一个星期日。"
(通过http://aa.usno.navy.mil/faq/docs/daylight_time.php

这些日期的 Javascript 日期对象中似乎存在错误。如果您将 127627200000 毫秒转换为日期,则它应该是 Thu Jan 17 00:00:00 EDT 1974。这在 http://www.fileformat.info/tip/java/date2millis.htm 上是正确的,但在 http://www.esqsoft.com/javascript_examples/date-to-epoch.htm,表示它转换为 1974 年 1 月 16 日星期三 23:00:00 GMT-0500(东部标准时间)。如果您在 javascript 中创建一个新的 Date(127627200000) 对象,它会提供后一个日期转换。这发生在所有主要浏览器中。

我无法想象这是第一次给任何人带来问题,但是通过在线搜索我找不到任何其他此问题的案例。有谁知道是否有针对此问题的现有修复或更简单的修复,而不是手动检查 Javascript 转换错误的日期?还有其他日期这是个问题吗?

【问题讨论】:

  • 啊!!全球化的乐趣……你有没有想过,1974年美国可能有夏令时,其他国家可能没有?并且为了尽可能广泛地使用(更不用说更简单的开发过程)JavaScript 可能没有一个表格来包含每个可能的国家/地区的所有可用 DST?

标签: javascript dst


【解决方案1】:

和以往一样,最好检查一下规格:)

在这种情况下,我在ECMA-262 的第 15.9.1.9 节看到这一点感到非常震惊:

ECMAScript 的实现 不应该尝试确定是否 确切时间以日光为准 节省时间,但只是白天 节省时间将生效 如果当前夏令时 当时使用的算法。 这样可以避免并发症,例如 考虑到这些年 语言环境观察夏令时 全年无休。

换句话说,一个符合 ECMAScript 的实现不允许在历史上是准确的。

现在是否所有实现都遵循这一点,我不确定...但它确实建议您需要某种单独的库,如果您想获得历史上准确的时区...其中“历史上准确”当然,不一定要回溯到 1974 年:美国在 2007 年改变了 DST 时间表,而其他国家最近也这样做了(而且警告较少)。


1 15.9.1.9 的第一次出现。由于某种原因,它发生了两次——一次是“夏令时调整”,一次是“当地时间”。哇。

【讨论】:

  • Java 的历史时区让不少人感到惊讶(尤其是在 1.4 中添加时)。特别令人惊讶的是 1970 年 1 月 1 日伦敦的 +1 小时偏移和 1920 年代初期希腊赫尔辛基的小数秒偏移。
  • 小数秒偏移听起来确实是个坏消息。我想我什至会争辩说,很少有应用程序真正想要这种行为,最好将其排除在外,例如闰秒......
【解决方案2】:

Java 有历史时区(回溯到 1920 年左右),JavaScript 显然没有。

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 2013-07-16
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    相关资源
    最近更新 更多