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 日(公历)。在此之前,日期将采用儒略历。”

因此,OP 的 Java 日期 1582 年 9 月 26 日是儒略日期。1582 年儒略历和公历日期相差10 天

如果有问题的 JavaScript 实现不尊重 Julian 到 Gregorian 的切换,而是使用 Gregorian 日期,无论我们处于 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 回答
0

自 1970 年 1 月 1 日 00:00:00 GMT 以来,javagetTime()和return 都已经过去了很多毫秒。javascript getTime()否定参数计算过去的日期。

在 jdk 中发现了一个错误。阅读此内容,在 jdk 7 中似乎从Oct 5 1582 到 Oct 15 1582缺少 10 天。我认为 10 天的差异javascript getTime()来自这个错误。

于 2015-03-21T22:46:05.167 回答