将时间戳Sap字段解析为Java Date

时间:2012-11-16 02:29:23

标签: java parsing datetime soap timestamp

我从SOAP消息收到了以下日期: 的 2012-11-16T02:02:05Z

如何解析日期?根据SOAP规范,日期中的T和Z是什么意思?

2 个答案:

答案 0 :(得分:1)

我可以这样做正确解析:

new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").parse(paymentDate);

谢谢@vikdor!

答案 1 :(得分:1)

TL;博士

Instant.parse( "2012-11-16T02:02:05Z" )

ISO 8601

您的输入字符串采用标准ISO 8601格式。该标准定义了许多有用的,实用的,明确的文本格式,用于表示日期时间值。

ISO 8601格式通常被现代协议采用,例如XML模式,SOAP等,取代了RFC 1123 / RFC 822等笨拙的过时格式。

ISO 8601的特定格式使用:

  • T将年 - 月 - 日部分与小时 - 分 - 秒部分分开。
  • ZZulu的缩写,表示UTC时间(+00:00的{​​{3}})。

使用java.time

使用offset-from-UTC包中的现代类。在解析/生成字符串时,它们默认使用ISO 8601格式。

java.time类代表Instant中时间轴上的一个时刻,分辨率为UTC(小数部分最多九(9)位)。

Instant instant = Instant.parse( "2012-11-16T02:02:05Z" ) ;

以UTC格式捕获当前时刻。

Instant instant = Instant.now() ;

只需调用toString即可生成标准格式的字符串。

String output = instant.toString() ;
  

2017-07-26T01:23:45.704781401Z

关于java.time

nanoseconds框架内置于Java 8及更高版本中。这些类取代了麻烦的旧java.time日期时间类,例如legacyjava.util.Date和& Calendar

现在位于SimpleDateFormatJoda-Time项目建议迁移到maintenance mode类。

要了解详情,请参阅java.time。并搜索Stack Overflow以获取许多示例和解释。规范是Oracle Tutorial

从哪里获取java.time类?

  • JSR 310Java SE 8以及之后
    • 内置。
    • 带有捆绑实现的标准Java API的一部分。
    • Java 9增加了一些小功能和修复。
  • SE 9Java SE 6
    • 大部分java.time功能都被反向移植到Java 6& 7 {in SE 7
  • ThreeTen-Backport
    • Android项目专门为Android调整 ThreeTen-Backport (如上所述)。
    • 请参阅ThreeTenABP

How to use ThreeTenABP…项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如ThreeTen-ExtraIntervalYearWeekYearQuarter