Java Date解析错误地增加了一个小时

时间:2017-04-09 16:44:27

标签: java string date parsing

我的DateFormat应该是正确的(24小时格式)

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

但是当我尝试解析时,我有一个最奇怪的'bug'(sdf.parse(string))

  

“2010-03-28 02 :28:25”

我明白了:

  

Sun Mar 28 03 :28:25 CEST 2010

由于一些奇怪的原因,它增加了一个小时。这也是给我这种行为的唯一日期,其他时间等工作得很好。它始终是代表小时的“02”。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

作为评论状态,您尝试解析的时间恰好是夏令时(DST)日期,即从冬季到夏季时间变化的一天

信息在这里:

https://www.timeanddate.com/time/dst/2010.html

答案 1 :(得分:1)

在你的时区没有2010-03-28 02: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 ) ;