当测试在系统之间映射日期时间类型的Web服务时,我注意到在公历开始时间之前发送任何日期会导致在转换为最终类型时失去准确性,最终结果总是在范围内略微提前几天.
我把问题缩小到了确切的界限,但是我仍然无法弄清楚为什么它会像这样投射,从文件中说明朱利安日历用于格里高利历开始之前的日期时间:1582年10月15日.
这个问题行是在与流延XMLGregorianCalendar到GregorianCalendar,行78:calendarDate = argCal.toGregorianCalendar();
当时间摘自calendarDate在线86:cal.setTime(calendarDate.getTime());时间回来在它前面的应该是什么2天后,1月3日而不是1月1日,你会看到从下面的程序输出.
这是我制作的示例程序,用于显示端到端的铸造过程:
import java.sql.Date;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
public class TestDateConversions {
public static void main(String[] args)
{
TestDateConversions testDates = new TestDateConversions();
try
{
XMLGregorianCalendar testDate1 = DatatypeFactory.newInstance().newXMLGregorianCalendar();
testDate1.setYear(0001);
testDate1.setMonth(01);
testDate1.setDay(01);
System.out.println("Start date: "+testDate1.toString() +"\n**********************");
testDates.setXMLGregorianCalendar(testDate1);
System.out.println("\nNull given \n"+ "**********");
testDates.setXMLGregorianCalendar(null);
}
catch(Exception e)
{
System.out.println(e);
}
}
public void setXMLGregorianCalendar(XMLGregorianCalendar argCal)
{
GregorianCalendar calendarDate; …Run Code Online (Sandbox Code Playgroud)