2012-11-20 110 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()到這個值設置爲一個較早的日期,以避免將其改爲儒略曆。