
奇妙な状況になっています。最近、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 のオフセットがあります。
これは明確で理解しやすいです。
インドには 1906 年まで公式の時間帯がありませんでした。ボンベイ、カルカッタ、マドラスの 3 つの総督府があり、経度に応じて 3 つの都市に 3 つの現地時間がありました。こうして作られた 3 つの時間帯は、その周辺および近隣のすべての州や都市で採用されました。
ここからが面白いところです。インドには 1906 年 1 月 1 日まで公式のタイムゾーンがなかったようです。これはあなたの実証的研究と一致しています。
カルカッタは UTC+05.54 に設定され、現在の IST の +00:24 になります。
これは、NodeJS の奇妙な動作を(ある程度)説明するものです。これもまた、あなたの研究と一致しています。
この歴史にはまだまだ多くのことが含まれていますが、いずれにしても、どちらの場合も時刻は正しい可能性があると結論付けたいと思います。タイムゾーン自体が存在しなかったため、これらの古い日付の正確な時刻を特定するのは非常に困難です。一般的に、タイムゾーンは非常にわかりにくく、国によって異なるカレンダーが使用されていた可能性があるため、古い日付を信頼すべきではありません。また、たとえば 1600 年代の日付を使用する現実的なユースケースはありません。