This question already has answers here:
Date change when converting from XMLGregorianCalendar to Calendar
(2个答案)
3年前关闭。
我在工作时遇到一个奇怪的情况,一个应用程序向我们发送了包含值“0001-01-01”的XML,该值被解析为
这是在从
样本输出:
毫秒之间的确切差额为172800000。有人知道为什么吗?
(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