it-swarm-ja.com

Centosは、NodeJSから1905年より前のすべての日付に間違った日時を指定しています

私は奇妙な状況にあります。最近、AzureクラウドからDigitalOceanサーバーに移行しました。 Nodejsバージョンv10.15.0とCentos7を使用しています。

私のtimedatectl出力は

[[email protected] 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
[[email protected] install-scripts]$ 

1日の始まりに時間を設定することによる日付の出力は、現在の日付の適切な出力を提供します。しかし、同じことが1900年より前の日付の24分の違いで応答しています。

私のタイムゾーン設定はIST(+5.30)にあります

[[email protected] install-scripts]$ date
Tue Mar 19 15:36:57 IST 2019
[[email protected] 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
Deepan

実は18時06分がいい時期だと思います。この記事を読んだ後、私はこの結論を出しました: https://www.dailyo.in/variety/indian-standard-time-time-zones-bagan-time/story/1/17080.html

この記事の関連部分は次のとおりです。

インドだけでなく、隣接するスリランカでもスリランカ標準時と呼ばれているインド標準時は、UTC + 05:30のオフセットがあります。

これは明確で理解しやすいです。

インドには1906年まで公式のタイムゾーンがありませんでした。経度のどこに落ちたかに応じて、ボンベイ、カルカッタ、マドラス、および3つの都市の3つの現地時間の3つの大統領がありました。このように作成された3つのタイムゾーンの後に、その周辺および周辺のすべての州または都市が続きました。

ここが面白いところです。インドには1906年1月1日まで公式のタイムゾーンがなかったようです。これはあなたの経験的研究と一致しています。

カルカッタはUTC + 05.54に設定されており、現在のISTの+00:24になっています。

これは、NodeJS(一種)の奇妙な動作を説明します。再びあなたの研究に沿って。

この歴史にはまだまだたくさんのことがありますが、とにかく、これらの両方の場合で時間が正しい可能性があると結論付けます。タイムゾーン全体が存在していなかったため、これらの古い日付の正確な時刻を特定することは非常に困難です。一般に、古い日付を信頼するべきではありません。タイムゾーンが非常に混乱する可能性があり、国によっても異なるカレンダーが使用されている可能性があるためです。また、たとえば1600年代の日付を使用するための現実的な使用例はありません。

1
Aulis Ronkainen