Java 时间戳显示错误的数据
为什么时间戳((长)-62135596800000L)返回0001-01-03 00:00:00,但必须返回0001-01-01 00:00?此服务显示正确的时间戳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
-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。也许塞特的计算在闰年计算上有错误;格里高利/朱利安历法。非常好地表达了。。。难以置信的