2017-04-09 57 views
0

我的日期格式應該是正確的(24小時格式)的Java日期解析錯誤地增加了一個小時

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") 

但我最奇怪的「錯誤」,當我嘗試解析(sdf.parse(串))

「2010-03-28 :28:25」

我得到:

太陽3月28日:28:25 CEST 2010

它增加了一個小時,一些奇怪的原因。這也是唯一給我這種行爲的日期,其他時間等工作很好。它總是代表那個奇怪時刻的'02'。

有什麼想法?

+3

我不能更強烈地建議不要使用傳統的'java.util.Calendar'和'java.util.Date'類。你應該在'java.time'包中找到合適的類並使用它。 –

+2

至於錯誤,我的錢是在夏季時間v冬季時間。 –

+3

不是,那是因爲你的時區 –

回答

1

有沒有這樣的時間2010-03-28 2時28分25秒的時區。 由於夏令時,時間從01:59:59直到03:00:00。

要避免這樣的問題,請使用新的java.time類,並始終在適當的位置指定您的時區。

String input = "2010-03-28 02:28:25".replace(" " , "T") ; 
LocalDateTime ldt = LocalDateTime.parse(input) ; // Has no time zone nor offset-from-UTC. 
ZoneId z = ZoneId.of("Europe/Paris") ; 
ZonedDateTime zdt = ldt.atZone(z) ; 
+0

語言環境是無關緊要的。這裏重要的是時區。另外,使用java.time不會避免這個問題。它將以不同的方式表現出來。 –

+0

我的意思是locale,而不是'locale'。無論如何改變了它。 – OrangeDog

+0

這就是爲什麼它說「和」。 'java.time'包迫使您在需要時添加時區。 – OrangeDog