2010-08-19 45 views
3

將XML文檔中的日期和時間解析爲JodaTime對象時,我使用了一組通用的轉換實用程序,通常使用由org.joda.time.format.ISODateTimeFormat提供的解析器和格式化程序。將xs:帶時區的日期分解爲Joda LocalDate

這在大多數情況下都能正常工作,但是這次我看到格式2010-08-19Zxs:date值的文檔。這是一個非常有效的xs:date值,但我試過的標準ISODateTimeFormat-生成的LocalDate解析器都不會接受它。我能找到的最接近的是ISODateTimeFormat.dateParser(),它將接受相當奇怪的2010-08-19TZ,但不接受2010-08-19Z(注意T)。

由於Joda和XML Schema都應該嚴格遵守ISO日期/時間格式規則,但這兩者中的任何一個都不是,或者規範是模糊的,這是非常令人惱火的。

在我承認失敗和手卷自定義格式之前,任何人都可以指向我的ISODateTimeFormat-sourced解析器,它將讀取該值?

回答

1

我相信根據ISO-8601,'Z'是時間值的一部分。 'T'分隔符僅用於創建組合的日期/時間值。嚴格閱讀這意味着'Z'不能出現在沒有時間值的日期之後,該時間值可以是空的,因此「奇怪的」2010-08-18TZ

這似乎是xs:date和ISO-8601的定義之間的輕微阻抗不匹配。

編輯:我找到了ISO 8601的副本。它沒有定義在XML Schema Datatypes規範中定義的「時區日期」的概念。

而不是從頭開始編寫一個簡單的包裝器,它將具有時區的xs:date實例轉換爲相應的ISO-8601值(即插入'T'),然後使用現有的ISODateTimeFormat.dateParser()

+0

所以規格不太匹配。很好:( – skaffman 2010-08-19 21:08:00

+0

我認爲ISO-8601是在幾年前定義的,早在XML Schema之前,他們可能沒有像XML Schema規範那樣嚴格地考慮日期。 – 2010-08-19 21:14:09