2011-10-20 78 views
0

我正在使用下面的代碼來解析一個字符串到日期GMT-> EDT。我不明白我看到的結果。與格林威治標準時間解析的意外結果

 SimpleDateFormat dformat = new SimpleDateFormat("yyyyMMdd-hh:mm:ss"); 
     TimeZone gmt = TimeZone.getTimeZone("GMT"); 
     dformat.setTimeZone(gmt); 
     Date d = dformat.parse(time); 

如果時間= 「20111019-13:00:00」,則d結束是星期三10月19日九時00分00秒EDT 2011.然而,如果時間= 「20111019-12:59:59」 ,d某種程度上結束了2011年10月18日星期二20:59:59 EDT。這怎麼可能?

回答

1

您的意思是HH:mm:ss爲時間組件,而不是hh:mm:ss。它使用了12小時制,並且將12:59:59解釋爲00:59:59。

請注意,您的分析呢執行轉換到一個特定的時間段 - 因爲Date不知道時區。您只看到EDT,因爲(我懷疑)您打印的是d.toString(),它始終使用當地時區。

Java的日期/時間API是相當可怕的 - 如果你能有可能,我會強烈建議你移動到Joda Time相反,在那裏你可以使用一個DateTime有一個時區...,讓你在它們之間轉換。

+0

對不起,我忽略了實際轉換的代碼,當我注意到問題出現在我發佈的部分時。有道理,謝謝!我也不是日期功能的粉絲,但這是我唯一的選擇。 – Sarah

相關問題