2013-01-18 135 views
0

當我這樣做:如何將Java日曆設置爲特定的UTC時間?

Calendar c = Calendar.getInstance(TimeZone.getTimeZone("UTC")); 
c.set(9999, 11, 31, 0, 0, 0); 
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yy HH.mm.ss.SSSSSSSSS a"); 
String date = formatter.format(c.getTime()); 
assertEquals("31-Dec-99 00.00.00.000000000 AM", date); 

我得到這樣的:30日 - 12月99 18.00.00.000000318 PM

我如何得到我想要的時間?

回答

3

在執行格式之前,您還需要設置formatter's time zone

formatter.setTimeZone(c.getTimeZone()); 

否則它將使用平臺的默認時區。


無關的具體問題,日曆不成立納米秒,所以這部分可能仍是有點過格式化後。

+0

GAAA。我剛剛在日曆/時間戳/格式化程序上受過兩次教育!謝謝! – markthegrea

+0

是的 - 特別是,「318」表示毫秒也沒有被重置爲0。 –

0

您正在創建SimpleDateFormatter而未指定時區 - 因此默認情況下它將使用系統本地時區。如果您希望格式化程序也使用UTC,只需設置它即可。

請注意,Date值是時區不可知的 - 它是只是自Unix紀元以來的毫秒數。它不知道什麼時區最初用於創建它。這就是爲什麼您需要在格式化程序上調用setTimeZone(或使用帶有區域的構造函數)。

的318毫秒顯示,原來的Date值包含的318。java.util.Date一毫秒組件只支持毫秒的分辨率,所以你應該在你的格式使用SSS000000 ...你應該設置毫秒值0反正:

c.set(Calendar.MILLISECOND, 0); 

(煩人,設置 「年,月,日,時,分,秒」 不重置毫秒價值似乎瘋了我,但是......。)

作爲一個方面說明,內置的Java日期/時間API以各種方式非常嚴酷。你可能很想用Joda Time來代替...

相關問題