2016-01-11 65 views
3

我試圖輸出當前日期時間爲以下格式UTC: 2016-01-11T14:08:42 + 00:00SimpleDateFormat的忽略 「XXX」,如果時區設置爲 「UTC」

final SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX"); 
formatter.setTimeZone(TimeZone.getTimeZone("UTC")); 

final String dateString = formatter.format(new Date()); 

「dateString」現在應該包含「2016-01-11T14:08:42 + 00:00」,但它包含「2016-01-11T14:08:42Z」。

沒有「UTC」時區設置,我得到了正確的格式,但 - 當然 - 在我的具體時區...

任何想法?

回答

6

參見SimpleDateFormat的文檔:

用於格式化[使用ISO 8601時區],如果來自GMT的偏移值是0, 「Z」 被產生。

因此,這種行爲是預期的。

您可以:

  • 使用RFC 822時區格式化ZZZ;然而,這將產生「+0000」
  • 操作字符串替換最終Zstr.replaceAll("Z$", "+00:00")
+0

我覺得我的方法就是「錯」的方式。我會嘗試使用'Z',因爲它似乎是標準。謝謝! – eventhorizon

+0

@eventhorizo​​n我不認爲你的方式是錯的;我發現使用'Z'而不是'+00:00'是意想不到的行爲。我確信這個決定背後有一個很好的意圖,我只是不確定它會發生什麼。但是,堅持'Z'可能會更容易。 –

+0

@eventhorizo​​n Z是在ISO-8601標準中正式定義的UTC + 00:00的符號。字母Z最初可能來自美軍用途(Z = Zulu)。 –