在我们的应用程序中,我们使用了一个提供soap响应XML(文档样式)的Web服务.
当我检查Web服务提供程序时,它只是一个接口,它将从不同源获取的响应节点值(SubscriberContextIdentifier)转换为MemberEffectiveTimestamp节点,并提供相同的响应给我们.
<SubscriberContextIdentifier>20152201846166</SubscriberContextIdentifier>
Run Code Online (Sandbox Code Playgroud)
转换为以下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>
Run Code Online (Sandbox Code Playgroud)
问题:
我需要获取第一个提供者提供给接口团队的值,即来自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);
}
Run Code Online (Sandbox Code Playgroud)
XSD文件:
<xsd:element name="MemberEffectiveTimestamp" type="bt:Timestamp"
minOccurs="0"/>
<xsd:simpleType name="Timestamp">
<xsd:restriction base="xsd:dateTime"/>
Run Code Online (Sandbox Code Playgroud)
输出:
Memeber Effective Timestamp -->Sat Aug 08 18:46:16 EDT 2015
Memeber Effective Timestamp after conversion -->201588184616600
Run Code Online (Sandbox Code Playgroud)
当我从响应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));
Run Code Online (Sandbox Code Playgroud)
打印:
2015-08-08T18:46:16.6Z
Sat Aug 08 14:46:16 EDT 2015
2015220144616600
Run Code Online (Sandbox Code Playgroud)
如你所见,时间18:46:16.6Z实际上14:46:16 EDT并非18:46:16 EDT如你所示.
此外,当它真的时,你显示了一个DDD值:88220
2015 88 18 46 16 600 <-- from question
2015 220 14 46 16 600 <-- from this answer
Run Code Online (Sandbox Code Playgroud)
为什么你得到88,为什么它不是零前缀,我不知道.
另请注意,这S是一个毫秒值,而不是小数秒值,并且应始终给出SSS,否则.032将输出毫秒值32,而不是032它应该.
SimpleDateFormat不能输出十分之一秒,只能输出毫秒.要获得十分之一秒,请使用SSS,然后截断字符串.
| 归档时间: |
|
| 查看次数: |
4934 次 |
| 最近记录: |