2016-01-07 87 views
1

如何在XMLGregorianCalendar中減去一天? 也同時減去如何與以下問題應付起來:在XMLGregorianCalendar中減去一天

  • 它不進入負值本月
  • 的第一天的情況下,在一年的1月1日的情況下,它需要的地方回到前一年

和其他類似的東西。

請不要建議使用任何其他類似Joda-Time的圖書館。我知道他們很棒,但我只需要使用XMLGregorianCalendar來完成這個任務。

感謝

回答

4

只是轉換到正常GregorianCalendar,做算術那裏,然後再轉換回來:

GregorianCalendar calendar = xmlCalendar.toGregorianCalendar(); 
calendar.add(Calendar.DAY_OF_MONTH, -1); 
xmlCalendar = datatypeFactory.newXMLGregorianCalendar(calendar); 

(這裏假設你已經有了理所當然的DatatypeFactory如有必要,您可以隨時撥打DatatypeFactory.newInstance()。 )

+0

這會照顧所有潛在的擔心月份和年份的變化? @Jon Skeet – sam100rav

+0

@ sam100rav:是的。您可能想明確指定時區。 –

+0

最初,xmlGregorianCalendar在其中設置了時區,但在轉換之後還必須重新設置時區嗎? – sam100rav

4

XMLGregorianCalendar有一個add(Duration)方法,你也可以使用這個計算,而不需要轉換成一個GregorianCalendar冷杉ST。這裏有一個例子:

DatatypeFactory df = DatatypeFactory.newInstance(); 
XMLGregorianCalendar calendar1 = ...; 
XMLGregorianCalendar calendar2 = (XMLGregorianCalendar) calendar1.clone(); 
calendar2.add(df.newDuration("-P1D"));