Esa*_*ija 13
-62135596800000是0001-01-03 00:00:00.0因为默认情况下,java使用Julian日历表示1582年10月15日之前的日期.
您正在使用的网站使用javascript,它使用外推或预知的公历日历.从javascript规范
ECMAScript使用外推格里高利系统将日期数字映射到年份数字,并确定该年份内的月份和日期.
的确,在javascript中:
new Date(-62135596800000).toUTCString()
//"Mon, 01 Jan 1 00:00:00 GMT"
Run Code Online (Sandbox Code Playgroud)
你可以在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
Run Code Online (Sandbox Code Playgroud)
不幸的是我不知道如何将Gregorian更改Calendar为Date对象,所以我直接从日历对象进行格式化.如果我这样
formatter.format(date.getTime())做会失去格里高利变化设置并再次显示第3天.
朱利安的日期提前2天,因为根据这一点,朱利安在从公元前1年到公元100年的2天之前领先于公历格里高利.
顺便说一句,我建议使用JodaTime它,它正确(我的意见,但如果你需要更有说服力的东西)默认为纯格里高利:
DateTime dt = new DateTime(-62135596800000L, DateTimeZone.UTC);
System.out.println(dt.toString());
//0001-01-01T00:00:00.000Z
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4267 次 |
| 最近记录: |