3

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

这在大多数情况下都可以正常工作,但这次我看到的文档具有xs:dateformat 的值2010-08-19Z。这是一个完全有效的xs:date值,但我尝试过的标准生成的解析器都不会接受它ISODateTimeFormatLocalDate我能找到的最接近的是ISODateTimeFormat.dateParser(),它将接受看起来很奇怪的2010-08-19TZ,但不是2010-08-19Z(注意T)。

这一切都很烦人,因为 Joda 和 XML Schema 都应该严格遵守 ISO 日期/时间格式规则,但其中一个不是,或者规范是模糊的。

在我承认失败并手动滚动自定义格式之前,任何人都可以将我指向一个ISODateTimeFormat可以读取该值的源解析器吗?

4

1 回答 1

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()

于 2010-08-19T20:58:21.337 回答