java - 如何获取最新的 XMLGregorianCalendar

标签 java xml

在我们的应用程序中,我们使用提供肥皂响应 XML(文档样式)的 Web 服务。

当我检查网络服务提供商时,他们只是一个转换的接口(interface) 他们从不同来源获取的响应节点值(SubscriberContextIdentifier)进入MemberEffectiveTimestamp节点并提供与我们相同的响应。

         <SubscriberContextIdentifier>20152201846166</SubscriberContextIdentifier>   

转换为下面 xml 中的 MemberEffectiveTimestamp 节点

响应 XML 示例:

                <ct:PersonName>
                <ct:FirstName>MICHAEL</ct:FirstName>
                <ct:Middle1Name>J</ct:Middle1Name>
                <ct:LastName>ROSSMAN</ct:LastName>
        </ct:PersonName>
        <ct:BirthDate>1979-09-10</ct:BirthDate>
        <ct:GenderCode>M</ct:GenderCode>
        <ct:MaritalStatusCode>SNGL</ct:MaritalStatusCode>
        <ct:MemberSequenceNumber>1</ct:MemberSequenceNumber>
        <ct:SmokerStatusCode>UNK</ct:SmokerStatusCode>
        <ct:MemberEffectiveTimestamp>2015-08-08T18:46:16.6Z</ct:MemberEffectiveTimestamp>
        <ct:TimeTracking>
                <ct:UpdateTimestamp>2014-11-08T23:36:48.6</ct:UpdateTimestamp>
                <ct:AsOfDate>2014-11-08</ct:AsOfDate>
        </ct:TimeTracking>

问题:

我需要取回第一个提供者提供给接口(interface)团队的值,即来自 MemberEffectiveTimestamp 的 SubscriberContextIdentifier

现有代码:

  if (member.getMemberEffectiveTimestamp()!= null) {
        final EntityIdTypeWithChangedAtt.IdValueType idValueType = factory
                .createEntityIdTypeWithChangedAttIdValueType();
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyyDDDHHmmssS");
        System.out.println("Memeber Effective Timestamp -->"+member.getMemberEffectiveTimestamp().toGregorianCalendar().getTime());
        System.out.println("Memeber Effective Timestamp after conversion -->"+sdf.format(member.getMemberEffectiveTimestamp().toGregorianCalendar().getTime()));
        idValueType.setValue(sdf.format(member.getMemberEffectiveTimestamp().toGregorianCalendar().getTime()));
        idValueType.setName("SubscriberContextIdentifier");
        idValueLt.add(idValueType);
    }

XSD 文件:

   <xsd:element name="MemberEffectiveTimestamp" type="bt:Timestamp"
         minOccurs="0"/>
  <xsd:simpleType name="Timestamp">
    <xsd:restriction base="xsd:dateTime"/>

输出:

  Memeber Effective Timestamp -->Sat Aug 08 18:46:16 EDT 2015
  Memeber Effective Timestamp after conversion -->201588184616600

如果您比较毫秒值,那么当我从响应 xml 中检索该值时,她就会错过。

现在任何人都可以如何将 XMLGregorianCalendar 转换为日期。

最佳答案

无法重现您看到的数字,所以让我给您 MCVE (最小、完整和可验证的示例):

XMLGregorianCalendar xcal = DatatypeFactory.newInstance()
                                           .newXMLGregorianCalendar("2015-08-08T18:46:16.6Z");
Date date = xcal.toGregorianCalendar().getTime();
System.out.println(xcal);
System.out.println(date);
System.out.println(new SimpleDateFormat("yyyyDDDHHmmssSSS").format(date));

打印:

2015-08-08T18:46:16.6Z
Sat Aug 08 14:46:16 EDT 2015
2015220144616600

如您所见,时间 18:46:16.6Z 实际上是 14:46:16 EDT,而不是 18:46:16 EDT 如您所示。

此外,您显示的 DDD 值为 88,而实际上是 220:

2015  88 18 46 16 600   <-- from question
2015 220 14 46 16 600   <-- from this answer

为什么你会得到 88,以及为什么它不是零前缀,我不知道。

另请注意,S 是一个毫秒值,而不是小数秒值,并且应始终以 SSS 形式给出,否则为毫秒.032 的值将输出为 32,而不是应有的 032

SimpleDateFormat 无法输出十分之一秒,只能输出毫秒。要获得十分之一秒,请使用 SSS,然后截断字符串。

关于java - 如何获取最新的 XMLGregorianCalendar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36203089/

相关文章:

java - 输入另一个字符串后计算元音和辅音

javascript - SAPUI5 - 数据绑定(bind)到现有 XML 表

xml - 具有命名空间的 PowerShell XML 选择节点

java - 如何使用 xstream 将 Hashmap 映射到 XML 中的键值属性

java - Spring DaoSupport 和@PersistanceContext EntityManager?

java - 无法进入我的 spring boot Controller 方法

JavaFX TableView CellValueFactory

javascript - HtmlUnit 在 js 编译上卡住

xml - 通过 Camel 的 xpath 中字符的索引获取子字符串

php - Obj C MD5 与 PHP md5() 函数不同