2

Java と JavaScript では、負のミリ秒値に対して異なる結果が得られるようです。

ジャワ:

System.out.println(new Date(-12220000000000L));
Wed Sep 26 12:33:20 MST 1582

JavaScript:

console.log(new Date(-12220000000000));
 Date {Wed Oct 06 1582 12:33:20 GMT-0700 (LMT)}

生産量には 10 日間の差があります。しかし、一部の値では、差は 10 日未満です。W3C TryIt エディターを使用して JavaScript 出力をテストしました。偏差がどこから始まるのか正確にはわかりません。ここで何か間違ったことをしていますか?

4

3 に答える 3

3

Java のGregorianCalendarクラスにおけるユリウス暦からグレゴリオ暦への切り替えのデフォルトの日付は、「1582 年 10 月 15 日 (グレゴリオ暦) です。それ以前は、日付はユリウス暦になります。」

したがって、1582 年 9 月 26 日の OP の Java 日付はユリウス日付です。1582 年のユリウス暦とグレゴリオ暦の日付の違いは10 日でした。

問題の JavaScript 実装がユリウスからグレゴリオ暦への切り替えを尊重せず、OP が経験した状況にある時点に関係なくグレゴリオ暦の日付で動作する場合。

于 2015-03-22T00:27:10.217 に答える
1

nashorn を使用すると、いつ逸脱するかを確認できます。

> function printDate(x) { System.out.println(new Date(x) + " - " + new java.util.Date(x)); }

> printDate(-12219292800000)
Fri Oct 15 1582 00:00:00 GMT+0000 (GMT) - Fri Oct 15 00:00:00 GMT 1582

> printDate(-12219292800001)
Thu Oct 14 1582 23:59:59 GMT+0000 (GMT) - Thu Oct 04 23:59:59 GMT 1582

これは、ユリウス暦からグレゴリオ暦への切り替えに対応しています。

Java の日付ライブラリはこの変更を考慮に入れていますが、JavaScript の日付ライブラリは考慮していません。

于 2015-03-22T00:04:47.537 に答える