2012-11-16 45 views
0

我從SOAP消息中收到後續日期: 2012-11-16T02:02:05Z解析時間戳肥皂田間到Java日期

如何分析最新的嗎?根據SOAP規範,這個T和Z在日期中是什麼意思?

+3

查看SimpleDateFormat類:http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html以瞭解這些內容的含義。順便說一句,它們並不特定於SOAP。 – Vikdor

+0

@Vikdor哇,不是特定於SOAP,但有一些例子。看起來字符T和Z根據我在那裏找到的例子沒有任何意義:「yyyy-MM-dd'T'HH:mm:ss.SSSZ」 –

+0

只是Z似乎是時區,但值來自paypal webservice不符合規範.. –

回答

1

我能正確解析這樣的方式:

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

感謝@vikdor!

+0

FYI,麻煩的舊日期時間諸如['java.util.Date'](https://docs.oracle.com/javase/8/docs/api/java/util/Date.html),['java.util.Calendar']( https://docs.oracle.com/javase/8/docs/api/java/util/Date.html)和'java.text.SimpleTextFormat'現在是[legacy](https://en.wikipedia.org/wiki/Legacy_system),由[java.time](https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html)類代替。 –

1

TL;博士

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

ISO 8601

你輸入的字符串是標準ISO 8601格式。該標準爲表示日期 - 時間值定義了許多有用的,實用的,明確的文本格式。

的ISO 8601名的格式通常由現代的協議,如XML模式,SOAP等,排擠掉笨拙過時的格式,如RFC 1123/RFC 822採用

從ISO 8601您的特定格式使用:

  • T將年 - 月 - 日部分與小時 - 分鐘部分分開。
  • Z,簡稱Zulu,表示UTC時間(offset-from-UTC+00:00)。

使用java.time

使用現代化的班在java.time包。解析/生成字符串時默認使用ISO 8601格式。

Instant類表示UTC中的時間軸上的一個時刻,分辨率爲nanoseconds(最多九(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

java.time框架是建立在Java 8和更高版本。這些類取代了日期時間類legacy,如java.util.Date,Calendar,& SimpleDateFormat

Joda-Time項目現在位於maintenance mode,建議遷移到java.time類。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。規格是JSR 310

從何處獲取java.time類?

ThreeTen-Extra項目與其他類擴展java.time。這個項目是未來可能增加java.time的一個試驗場。您可以在這裏找到一些有用的類,如Interval,YearWeek,YearQuartermore