XMLGregorianCalendar到String转换错误

时间:2012-11-20 10:10:08

标签: java simpledateformat gregorian-calendar

以下代码段适用于年级高于1600左右的日期。但是它会像1001, 1500, 1400等那样提供错误的输出。你能解释一下原因吗?

SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");

XMLGregorianCalendar cal DatatypeFactory.newInstance().newXMLGregorianCalendar("1600-01-01");

String birthDate = format.format(cal.toGregorianCalendar().getTime());

System.out.println(birthDate);

3 个答案:

答案 0 :(得分:1)

我非常确定格列高利历在1582年开始,这可以解释为什么它适用于1600但不适用于1500.

答案 1 :(得分:1)

将XMLGregorianCalendar转换为GregorianCalendar后,DateFormat显示“错误”年份的原因是GregorianCalendar.getGregorianChange()默认为1582-10-15。

如果GregorianCalendar设置为公历日历更改日期之前的日期,它实际上将代表Julian calendar中的日期,这会导致年份显得“错误”,因为一年的长度这两个日历是不同的。

对此的修复可能是使用GregorianCalendar.setGregorianChange()将此值设置为较早的日期,以避免它更改为儒略历。

答案 2 :(得分:-1)

我不太确定。但我认为它指的是大纪元(日期),但......时代始于1970年(不是1960年)。

格里高利历也有一些限制(我不能提及每一个,但是......),例如,你不能使用“零”年的日期,这不能正确解释(我认为日期已经出来Anno Domini,相反,你应该提到基督之前......我不确定。)

然而......你应该环顾四周寻找“时代”。我希望这对找到正确答案很有用。