This question already has answers here:
Date change when converting from XMLGregorianCalendar to Calendar

(2个答案)


3年前关闭。




我在工作时遇到一个奇怪的情况,一个应用程序向我们发送了包含值“0001-01-01”的XML,该值被解析为XmlGregorianCalendar的实例。然后我意识到,该值神奇地转换为“0001-01-03”,并添加了2天的准确金额。

这是在从GregorianCalendar转换为Date的过程中发生的,我将其复制如下:
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;

import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;

public class Test {

    public static void main(String[] args) throws ParseException, DatatypeConfigurationException {
        final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

        GregorianCalendar gregCalendar = new GregorianCalendar();
        gregCalendar.setTime(dateFormat.parse("0001-01-01"));
        XMLGregorianCalendar calendar = DatatypeFactory.newInstance().newXMLGregorianCalendar(gregCalendar);

        System.out.println("calendar: " + calendar);
        System.out.println("date: " + calendar.toGregorianCalendar().getTime());
    }
}

样本输出:



毫秒之间的确切差额为172800000。有人知道为什么吗?

最佳答案

可爱吗? Java GregorianCalendar,而不是(尽管它具有误导性的格里高利历)(尽管它具有误导性的名称),但是是一个复合的日历,由儒略历开始和公历末尾组成。 (您甚至可以自己设置转换日期。)

在公历中,0001年1月1日为星期一。

在儒略历中,0001年1月1日是星期六。

我的 friend 们,在那里相差了两天。

引用:

https://www.timeanddate.com/calendar/?year=1&country=22
https://www.timeanddate.com/calendar/?year=1&country=23
https://en.wikipedia.org/wiki/Adoption_of_the_Gregorian_calendar
https://docs.oracle.com/javase/7/docs/api/java/util/GregorianCalendar.html

具体请参见最后一个链接中的SetGregorianChange

关于Java日期与公历/48小时的区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45822091/

10-13 09:05