2012-11-20 105 views
0

下面的代码片段完全适用于有一年以上日期或1600如此。但它会给出错误的输出,例如1001, 1500, 1400等。你能解释为什么吗?的XMLGregorianCalendar到字符串转换错误

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); 
+1

你能解释一下什么是错的吗?请举例说明印刷的内容和您的期望。 –

回答

-1

我不太确定。但我认为它指的是时代(日期),但......时代始于1970年(不是1960年)。例如,你不能使用从'零'年的日期,这不能正确解释(我认为日期是出于Anno Domini,相反,你应该参考之前的基督......我不确定)。

但是...你应该四处寻找“时代”。我希望这可以帮助找到正确的答案。

1

Im相当肯定的公历的1582年开始这可以解释为什么它的工作原理为1600而不是1500

1

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

如果GregorianCalendar的公历变更日期之前设定一个日期,它实际上是代表在Julian calendar日期,导致看似是“错误”的一年,因为一年的长度是不同的这两个日历。

甲定为这可被使用GregorianCalendar.setGregorianChange()到这个值设置为一个较早的日期,以避免将其改为儒略历。