2012-02-27 71 views
3

我使用xmlText()方法獲取XmlObject的Xml表示形式。 XmlDateTime對象在根據XML Schema: dateTime有效的字符串末尾帶有時區偏移。有沒有辦法強制XmlObject轉換爲Zulu格式的XML?XmlBeans XmlDateTime格式不帶時區信息

聞聽此事:2002-10-10T12:00:00-05:00 ,需要這個:2002-10-10T17:00:00Z

+0

你是如何構建XmlDateTime對象實例?你是否沿着'XmlDateTime.Factory.newInstance()'和'setDate(...)'的方向使用了一些東西? – 2012-02-27 17:01:57

+0

它以XML的格式進入,但後續系統無法處理它。所以我們需要轉換爲UTC格式。其實我只是發現這不再是一個問題,但我仍然對如何處理這種情況感興趣。 – GrkEngineer 2012-02-27 17:52:26

回答

3

我問的是XmlDateTime對象,因爲的實例前段時間我遇到了類似的問題。從我所知道的情況來看,XmlDateTime被打印到xml的方式取決於內部表示的值,而內部表示又取決於調用提供該值的setter。問題出在setDate(...)方法。

XmlDateTime的默認實現保持日期時間價值的內部作爲使用GDateBuilder建立了一個org.apache.xmlbeans.GDate。當你在XmlDateTime對象上設置日期時,它最終將值傳遞給GDateBuilder。 如果你看的setDate()方法的來源,javadoc中指出:

Sets the current time and date based on a java.util.Date instance. 
The timezone offset used is based on the default TimeZone. (The default TimeZone is consulted to incorporate daylight savings offsets if applicable for the current date as well as the base timezone offset.) 
If you wish to normalize the timezone, e.g., to UTC, follow this with a call to normalizeToTimeZone. 

由於XmlDateTime對象具有setGDate(...)方法可以測試標準化的方法是這樣的:

XmlDateTime xmlDateTime = XmlDateTime.Factory.newInstance(); 
xmlDateTime.setStringValue("2002-10-10T12:00:00-05:00"); 

System.out.println(xmlDateTime.xmlText()); 

GDateBuilder gdb = new GDateBuilder(xmlDateTime.getDateValue()); 
gdb.normalize(); 
xmlDateTime.setGDateValue(gdb.toGDate()); 

System.out.println(xmlDateTime.xmlText()); 

對於我這種印刷:

<xml-fragment>2002-10-10T12:00:00-05:00</xml-fragment> 
<xml-fragment>2002-10-10T17:00:00Z</xml-fragment> 

那是我能得到它在UTC打印的唯一途徑。

我希望有更好的辦法,雖然可惜我找不到它...