【问题标题】:Date to XMLGregorianCalendar separator comma instead of dot日期到 XMLGregorianCalendar 分隔符逗号而不是点
【发布时间】:2016-07-01 11:50:44
【问题描述】:

我有以下问题:

我已将java.util.Date 转换为XMLGregorianCalendar,输出格式如下:

2016-03-15T20:43:45.776+01:00

我需要:

2015-10-31T14:35:01,905+01:00

那么关于如何以编程方式将. 更改为, 有什么建议吗? 字符串替换不是一个选项,因为我需要进一步传递 XMLGregorianCalendar 对象。

任何帮助将不胜感激。

【问题讨论】:

  • 虽然在 ISO-8601-paper 中使用逗号是官方首选的样式,但 XML-schema 已经偏离了这一点,只使用了点。它甚至是强制性的,XMLGregorianCalendar 主要遵循 XML-schema,而不是 ISO-8601,所以我认为没有办法实现您想要实现的目标。
  • 感谢您的回答。 ISO 8601 实际上存在于我们将提供的 Web 服务操作的要求中,但我们首先要检查这一点。我会问他们这是否正确。

标签: java xml date converter


【解决方案1】:

ISO-8601-论文做出以下声明:

4.2.2.4 小数表示

[...]如果包含小数部分,则低阶时间元素(如果有) 应省略,小数部分应从 整数部分由 ISO 31-0 中指定的小数点符号,即逗号 [,] 或句号 [.]。其中,逗号是首选符号。[...]

但是 XML-Schema 说(作为偏差)在其内置时间相关类型的任何词法表示中只允许使用点(例如:xs:datetime 或 xs:time) . Java 类XMLGregorianCalendar 仅对内置类型建模,因此不允许逗号作为十进制符号。该语句也由方法 DatatypeFactory.newXMLGregorianCalendar(String lexicalRepresentation)javadoc 支持,该方法指向 XML-Schema 1.0 中的适当位置。

因此,如果您的 web 服务需要逗号(但它也应该能够根据 ISO-8601 处理点),那么您不能使用 XMLGregorianCalendar,而必须使用您自己的解决方案,并且可能使用 XML 中的自定义用户类型。 我个人认为点应该是可能的。

【讨论】:

  • 再次感谢您清理问题。我们的框架在其核心中使用 XMLGregorianCalendar,因此只为一个操作打补丁太昂贵了。相反,我们联系了规范团队并告诉他们我们提供“点”或什么都不提供(该属性不是强制性的)。你是对的 - 如果接收部分实施 ISO 8601,他们应该能够阅读它。
猜你喜欢
  • 2015-10-15
  • 1970-01-01
  • 2020-10-22
  • 1970-01-01
  • 1970-01-01
  • 2020-05-31
  • 2015-03-15
相关资源
最近更新 更多