javascript getTime()和Java getTime()之间的区别

时间:2015-03-21 22:15:44

标签: java javascript date negative-number gettime

似乎Java和JavaScript为负毫秒值提供了不同的结果。

JAVA:

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输出。我不知道偏差的确切位置。我在这里做错了吗?

3 个答案:

答案 0 :(得分:3)

在Java JulianGregorian

中从GregorianCalendar切换到"is October 15, 1582 (Gregorian). Previous to this, dates will be in the Julian calendar."日历的默认日期

因此,OP的1582年9月26日的Java日期是朱利安日期。 1582年朱利安和格里高利日期之间的差异是10 days

如果有问题的JavaScript实现不尊重Julian to Gregorian开关,但与Gregorian日期一起工作,无论我们处于OP经历的情况的时间点。

答案 1 :(得分: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

这对应于Julian to Gregorian calendar

的切换

Java的日期库将此更改考虑在内,但JavaScript没有。

答案 2 :(得分:0)

java getTime()javascript getTime()返回自1970年1月1日00:00:00 GMT以来经过的许多毫秒。否定参数计算过去的日期。

我找到了bug in jdk。阅读本文似乎在jdk 7中,从 1582年10月5日到1582年10月15日,缺少10天。我认为与javascript getTime()的10天差异来自此错误。