2017-04-09 60 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