2012-07-17 69 views
0

我用格式爲「HH:mm」的字符串解析時間爲java.text.SimpleDateFormat。例如10:3022:10SimpleDateFormat解析不正確的時間

SimpleDateFormat formatter = new SimpleDateFormat("HH:mm"); 
Date parsed = formatter.parse((String) value); 

格式化時區是爲我的設備(莫斯科時間+04:00),默認的時區。時間字符串是10:30和 解析後,我預計在莫斯科時區10:30 01/01/1970,但取而代之的是09:30 01/01/1970。我做錯了什麼?爲什麼我得到這種行爲?

+0

'日期'是非常不可靠的。使用[日曆](http://docs.oracle.com/javase/6/docs/api/java/util/Calendar.html),或者甚至更好[喬達時間](http://joda-time.sourceforge。淨/)來處理日期 – Keppil 2012-07-17 07:35:15

+0

@Keppil在這種情況下,這是正確的,但你說得對,Joda時間是一個更好的選擇。 – 2012-07-17 07:36:31

+0

@PeterLawrey:是的,對於這個特殊情況沒有很好的答案,但我想我會提及它希望讓OP避免很多未來的麻煩。 – Keppil 2012-07-17 07:40:42

回答

3

從1931年到1981年,莫斯科是UTC + 3。 http://www.timeanddate.com/worldclock/timezone.html?n=166&syear=1970

時區隨時間而變化,通常出於政治原因。

+0

好吧,因此這個問題的原因是SimpleDateFormat實現中的硬編碼嗎? – 2012-07-17 07:49:25

+0

恕我直言,行爲是正確的,所以沒有問題。注意:1930年以前莫斯科是UTC + 2。如果你想在所有年份中使用UTC + 4,你可以使用它作爲時區。 – 2012-07-17 08:27:35

+0

是的,我明白,行爲是正確的。謝謝,stackoverflowers! – 2012-07-17 08:36:11