Java 时间戳显示错误的数据

Java 时间戳显示错误的数据,java,android,date,timestamp,Java,Android,Date,Timestamp,为什么时间戳((长)-62135596800000L)返回0001-01-03 00:00:00,但必须返回0001-01-01 00:00?此服务显示正确的时间戳 -62135596800000是0001-01-03 00:00:00.0,因为 您正在使用的网站使用javascript,javascript对所有日期使用外推法或公历。从 ECMAScript使用外推的公历系统将日数映射到年数,并确定该年内的月份和日期 事实上,在javascript中: new Date(-6213559680

为什么时间戳((长)-62135596800000L)返回0001-01-03 00:00:00,但必须返回0001-01-01 00:00?此服务显示正确的时间戳


-62135596800000
是0001-01-03 00:00:00.0,因为

您正在使用的网站使用javascript,javascript对所有日期使用外推法或公历。从

ECMAScript使用外推的公历系统将日数映射到年数,并确定该年内的月份和日期

事实上,在javascript中:

new Date(-62135596800000).toUTCString()
//"Mon, 01 Jan 1 00:00:00 GMT"
您可以在java中使用类似的方法来获得相同的结果:

GregorianCalendar date = new GregorianCalendar();
date.clear();
//Use Gregorian calendar for all values
date.setGregorianChange(new Date(Long.MIN_VALUE));

date.setTimeZone( TimeZone.getTimeZone("UTC"));
date.setTime(new Date(-62135596800000L));

System.out.println(
        date.get(GregorianCalendar.YEAR) + "-" +
        (date.get(GregorianCalendar.MONTH) + 1) + "-" + 
        date.get(GregorianCalendar.DAY_OF_YEAR) + " " +
        date.get(GregorianCalendar.HOUR_OF_DAY) + ":" +
        date.get(GregorianCalendar.MINUTE) + ":" + 
        date.get(GregorianCalendar.SECOND) + "." +
        date.get(GregorianCalendar.MILLISECOND)
);
//Prints 1-1-1 0:0:0.0
不幸的是,我不知道如何执行从
Calendar
Date
对象的公历更改,所以我直接从Calendar对象进行格式化。如果我这么做了
formatter.format(date.getTime())
它将丢失公历更改设置并再次显示第三天

朱利安日期提前2天,因为根据, 从公元前1年到公元100年,朱利安比圣公会提前2天


顺便说一句,我建议使用,它正确地(我的意见)默认为纯公历:

DateTime dt = new DateTime(-62135596800000L, DateTimeZone.UTC);
System.out.println(dt.toString());
//0001-01-01T00:00:00.000Z

也许那个网站上的答案是错误的?在java中是-62135773200000L。也许塞特的计算在闰年计算上有错误;格里高利/朱利安历法。非常好地表达了。。。难以置信的