Centos 为 NodeJS 中 1905 年以下的所有日期提供了错误的日期时间

Centos 为 NodeJS 中 1905 年以下的所有日期提供了错误的日期时间

我遇到了一个奇怪的情况。最近我从 Azure 云迁移到了 Digital Ocean 服务器。我使用的是 Nodejs 版本 v10.15.0 和 Centos 7。

我的 timedatectl 输出是

[deploy@prod-ca-api install-scripts]$ timedatectl
Local time: Tue 2019-03-19 15:34:21 IST
Universal time: Tue 2019-03-19 10:04:21 UTC
RTC time: Tue 2019-03-19 10:04:21
Time zone: Asia/Kolkata (IST, +0530)
NTP enabled: no
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
[deploy@prod-ca-api install-scripts]$ 

通过将小时设置为一天的开始来输出日期,可以为我提供当前日期的正确输出。但对于 1900 年之前的日期,同样的响应会相差 24 分钟。

我的时区设置为 IST (+5.30)

[deploy@prod-ca-api install-scripts]$ date
Tue Mar 19 15:36:57 IST 2019
[deploy@prod-ca-api install-scripts]$ node
> let a = new Date()
undefined
> a.setHours(0,0,0,0)
1552933800000
> a
2019-03-18T18:30:00.000Z
> a = new Date('1700-01-01')
1700-01-01T00:00:00.000Z
> a.setHours(0,0,0,0)
-8520357208000
> a
1699-12-31T18:06:32.000Z

以前在 Azure 服务器中,我经常会1699-12-31T18:30:00.000Z使用1699-12-31T18:06:32.000Z

答案1

我认为正确的时间应该是18:06。我读了这篇文章后得出了这个结论:https://www.dailyo.in/variety/indian-standard-time-time-zones-bagan-time/story/1/17080.html

本文的相关部分如下:

印度标准时间是印度所采用的时间,而邻国斯里兰卡也将其称为斯里兰卡标准时间,这并不奇怪,其与 UTC+05:30 的偏移量为 UTC。

这是清楚且容易理解的。

印度直到 1906 年才有官方时区;当时有三个行政区:孟买、加尔各答、马德拉斯,三个城市根据其经度位置有三个当地时间。由此产生的三个时区被印度周边和附近的所有州或城市所遵循。

这就是有趣的地方。印度显然直到 1906 年 1 月 1 日才有官方时区。这与您的实证研究一致。

加尔各答时间为 UTC+05.54,即当前 IST 时间的 +00:24。

这可以解释 NodeJS 中的奇怪行为(有点)。这再次与您的研究一致。

关于这段历史还有很多内容,但无论如何,我认为这两种情况下的时间可能都是正确的。很难确定这些旧日期的准确时间,因为整个时区甚至都不存在。一般来说,你不应该相信旧日期,因为时区可能非常混乱,而且各国可能也使用不同的日历。此外,例如,使用 1600 年代的日期没有实际用例。

相关内容