将xs:time with timezone解析为Joda LocalDate

时间:2010-08-19 15:18:33

标签: java xsd jodatime

在将XML文档中的日期和时间解析为JodaTime对象时,我使用一组通用的转换实用程序,通常使用org.joda.time.format.ISODateTimeFormat提供的解析器和格式化程序。

这在大多数情况下都可以正常工作,但这次我看到格式xs:date的{​​{1}}值的文档。这是一个完全有效的2010-08-19Z值,但我尝试过的标准xs:date生成的ISODateTimeFormat解析器都不会接受它。我能找到的最接近的是LocalDate,它会接受相当奇怪的ISODateTimeFormat.dateParser(),但不接受2010-08-19TZ(请注意2010-08-19Z)。

这非常令人恼火,因为Joda和XML Schema都应该严格遵守ISO日期/时间格式规则,但其中任何一个都没有,或者规范是模糊的。

在我承认失败并手动滚动自定义格式之前,是否有人可以指向一个T来源的解析器来读取该值?

1 个答案:

答案 0 :(得分:1)

我相信根据ISO-8601,'Z'是时间价值的一部分。 “T”分隔符仅用于创建组合的日期/时间值。严格阅读这意味着'Z'不能出现在没有时间值的日期之后,时间值可能是空的,因此是“奇怪的”2010-08-18TZ

这似乎是xs:date和ISO-8601定义之间的轻微阻抗不匹配。

编辑:我找到了ISO 8601的副本。它没有定义“时间分区日期”的概念,例如XML Schema Datatypes规范中定义的。

如何将一个简单的包装器转换为相应的ISO-8601值(即只插入'T')然后使用现有的ISODateTimeFormat.dateParser()? / p>