似乎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输出。我不知道偏差的确切位置。我在这里做错了吗?
答案 0 :(得分:3)
因此,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天差异来自此错误。