什麼是在Java 8和XMLGregorianCalendar
之間轉換LocalDate
的最佳方式?LocalDate和XMLGregorianCalendar之間的轉換
21
A
回答
48
從LocalDate
轉換爲XMLGregorianCalendar
:
LocalDate date = LocalDate.now();
GregorianCalendar gcal = GregorianCalendar.from(date.atStartOfDay(ZoneId.systemDefault()));
XMLGregorianCalendar xcal = DatatypeFactory.newInstance().newXMLGregorianCalendar(gcal);
轉換回來更簡單:
xcal.toGregorianCalendar().toZonedDateTime().toLocalDate();
+2
從LocalDate轉換爲XMLGregorianCalendar時,請避免使用GregorianCalendar!問題是GregorianCalendar的時區是必填字段,但LocalDate中沒有時區信息! – riskop
3
從LocalDate
轉換爲XMLGregorianCalendar
可以使用
LocalDate localDate = ...;
GregorianCalendar calender = new GregorianCalendar();
Date utilDate = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
calender.setTime(utilDate);
XMLGregorianCalendar xmlCal = DatatypeFactory.newInstance().newXMLGregorianCalendar(calender);
並以XMLGregorianCalendar
轉換回LocalDate
:
XMLGregorianCalendar xmlCal = ...;
Date utilDate = xmlCal.toGregorianCalendar().getTime();
LocalDate localDate = LocalDateTime.ofInstant(utilDate.toInstant(), ZoneId.systemDefault()).toLocalDate();
7
LocalDate僅存儲年/月/日信息。它沒有時間和時區信息。 XMLGregorianCalendar存儲日期(年/月/日)+ 可選時間和可選時區信息。
所以從LOCALDATE的轉換的XMLGregorianCalendar很簡單:
LocalDate in;
XMLGregorianCalendar out;
in = LocalDate.parse("1999-11-11");
out = DatatypeFactory.newInstance().newXMLGregorianCalendar(in.toString());
從的XMLGregorianCalendar轉換爲LOCALDATE的可能並非如此簡單,因爲的XMLGregorianCalendar 可以有,你根本無法存儲時間和時區信息在LocalDate中。
但是,我猜如果你是從XMLGregorianCalendar轉換到LocalDate,那麼XMLGregorianCalendar是由非時區的xsd:date元素(在xml中表示爲YYYY-MM-DD)產生的。在這種情況下,你應該把它轉換是這樣的:
XMLGregorianCalendar in;
LocalDate out;
in = DatatypeFactory.newInstance().newXMLGregorianCalendar("2011-11-11");
out = LocalDate.parse(in.toXMLFormat());
整體例如:
{
LocalDate in;
XMLGregorianCalendar out;
in = LocalDate.parse("1999-11-11");
out = DatatypeFactory.newInstance().newXMLGregorianCalendar(in.toString());
System.out.println("in: " + in.toString());
System.out.println("out: " + out.toXMLFormat());
}
{
XMLGregorianCalendar in;
LocalDate out;
in = DatatypeFactory.newInstance().newXMLGregorianCalendar("2011-11-11");
out = LocalDate.parse(in.toXMLFormat());
System.out.println("in: " + in.toXMLFormat());
System.out.println("out: " + out.toString());
}
相關問題
- 1. 簡單轉換java.util.Date和XMLGregorianCalendar
- 2. 轉換的XMLGregorianCalendar到的java.sql.Timestamp
- 3. 轉換日期的XMLGregorianCalendar
- 4. 如何將時間間隔轉換爲NodaTime中的LocalDate範圍?
- 5. 在視圖之間轉換:在segues和代碼之間轉換
- 6. RGB和HSV空間之間的轉換
- 7. 的XMLGregorianCalendar到字符串轉換錯誤
- 8. double和「+」和「 - 」之間的轉換和轉換字符串
- 9. XMLGregorianCalendar時間
- 10. 從java.sql.Timestamp意外轉換爲joda的LocalDate
- 11. 在SPSS和R之間轉換時間
- 12. 喬達時間 - 轉換日曆對象LOCALDATE的
- 13. CXF DynamicWebservice客戶端dateTIme轉換爲XMLGregorianCalendar
- 14. SSE和NEON之間的轉換Intrinsics-Shuffling
- 15. C#轉換之間的Deedle幀和DataTable
- 16. SqlGeometry和DbGeometry之間的轉換
- 17. int和varchar之間的隱式轉換
- 18. 度和毫秒之間的轉換
- 19. SQL char和C之間的轉換#
- 20. Little和Big之間的Endienness轉換
- 21. 記錄和元組之間的轉換?
- 22. Mat和Mat1b/Mat3b之間的轉換
- 23. 休眠和節儉之間的轉換
- 24. tf和eigen之間的轉換
- 25. UIImage(PNG)和RGB8之間的轉換
- 26. cv :: Mat和XnDepthPixel之間的轉換*
- 27. 10和2之間的基礎轉換
- 28. InputStream和BufferedImage之間的轉換
- 29. 將字符串格式的XMLGregorianCalendar對象再次轉換爲XMLGregorianCalendar對象
- 30. Joda時間的LocalDate間隔
什麼已經在這裏找到答案 它類似於http://stackoverflow.com/questions/835889/java-util -date-to-xmlgregoriancalendar?answertab = votes#tab-top –
@AnkurAnand我不認爲這個問題非常相似 - 我需要從'LocalDate'轉換而不是'Date',並且我需要轉換兩個方向。答案可能是相似的,因爲轉換需要「日期」作爲一步之間,但問題不是。 – maja