2017-05-10 191 views
-2

格式化日期時出現問題。我想下面的輸出:Java格式化日期

YYYY-MM-DDTHH:MM:SS + 02:00

+02:00取決於你所在的時區,在我的情況歐洲/阿姆斯特丹

我有這樣的功能:

public String marshal(Date d) throws Exception 
{ 
    DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); 
    String s = formatter.format(d); 

    return s; 
} 

但它給我:

2017-05-10T14:56:46 + 0200

我哪有時區小時/分鐘,其間一個額外的冒號?

+1

嘗試 「YYYY-MM-dd'T'HH:MM:ssXXX」。請參閱http://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html – bradimus

+1

此格式由ISO 8601標準定義。 「ISO 8601」的搜索堆棧溢出查看許多現有帖子。在發佈之前,您應該始終徹底搜索。另一件事,避免使用舊的遺留日期 - 時間類;現在被java.time類取代。 –

+0

這似乎已被問及已回答:[http://stackoverflow.com/a/16289344/7750124](http://stackoverflow.com/a/16289344/7750124)但是,我會讀入文檔作爲@ f1sh解釋說它會幫助你更好地理解你的問題。上面鏈接中的解決方案似乎指向相同的答案。 – Koshux

回答

2

這是正確的,在the documentation

的模式字母的數量指定格式都格式化和解析如下[...]

而且從例子:

「yyyy-MM-dd'T'HH:mm:ss.SSSXXX」2001-07-04T12:08:56.235-07:00

這意味着可以使用模式中的「XXX」來表示時區的冒號分隔版本。

TL; DR:使用

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX"); 
+0

感謝的人,這樣做的把戲 – baliman

+1

在這種情況下,你可以接受這個答案作爲正確的:) – f1sh