在将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
来源的解析器来读取该值?
答案 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>