1
使用UTC時區時,我遇到了Calendar和SimpleDateFormatter的一些意外行爲。它看起來像SimpleDateFormatter給出了正確的結果,但日曆不是。我不知道爲什麼。我使用下面的代碼來生成日期使用日曆:帶日曆的時區
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
cal.set(Calendar.YEAR, 2012);
cal.set(Calendar.MONTH, Calendar.MARCH);
cal.set(Calendar.DAY_OF_MONTH, 5);
cal.set(Calendar.HOUR, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
換句話說,2012年3月5日00:00 UTC。
當我在本地CST時區打印這個時候,我得到:
Mon Mar 05 06:00:00 CST 2012這很奇怪,因爲CST是UTC-6:00,所以我預計2012年3月4日星期日18:00 CST(即午夜前6小時前一天)。相反,我在UTC 6小時後得到 。
當我使用像這樣一個SimpleDateFormatter:
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
df.setTimeZone(TimeZone.getTimeZone("UTC"));
df.parse("2012-03-05");
我得到預期的 「星期日2012年3月4日18:00 CST」,這是UTC前6小時,即UTC-6:00 。
爲什麼我的結果錯了?
哇,這是微妙的和可怕的。感謝您指出了這一點。改變它之後,單元測試現在通過。大! – PatrickB
它是。 Java 8之前的日期/時間函數確實存在問題。如果你打算和他們打交道,而且你不能使用Java 8,你可能需要查看一些特定的庫,例如[JodaTime](http://www.joda.org/joda-time/)。 –