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

Java日期解析错误地增加了一个小时,java,string,date,parsing,Java,String,Date,Parsing,我的日期格式应该是正确的(24小时格式) 但是当我尝试解析时,我遇到了最奇怪的“bug”(sdf.parse(string)) “2010-03-2802:28:25” 我得到: 3月28日星期日03:28:25 CEST 2010 由于某种奇怪的原因,它增加了一个小时。这也是唯一一次让我有这种行为的约会,其他时间工作都很好。总是'02'代表一个小时,表现得很奇怪 有什么想法吗?如评论所述,您试图解析的时间正好是夏令时(DST)日期,即时间从冬季更改为夏季的一天 信息如下: 如注释所述,您试图解

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

但是当我尝试解析时,我遇到了最奇怪的“bug”(sdf.parse(string))

“2010-03-2802:28:25”

我得到:

3月28日星期日03:28:25 CEST 2010

由于某种奇怪的原因,它增加了一个小时。这也是唯一一次让我有这种行为的约会,其他时间工作都很好。总是'02'代表一个小时,表现得很奇怪


有什么想法吗?

如评论所述,您试图解析的时间正好是夏令时(DST)日期,即时间从冬季更改为夏季的一天

信息如下:


如注释所述,您试图解析的时间正好是夏令时(DST)日期,即时间从冬季更改为夏季的日期

信息如下:


在您的时区中没有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 ) ;

在您的时区中没有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 ) ;


我强烈建议不要使用遗留的
java.util.Calendar
java.util.Date
类。你应该在
java.time
包中找到合适的类,并使用它。至于bug,我的钱是在夏季时间vs冬季时间。不是,是因为你的时区发生了什么,那天凌晨2点,在那个时区@JBNizet我相信我在这里寻找的词是“宾果!”,我强烈建议不要使用遗留的
java.util.Calendar
java.util.Date
类。你应该在
java.time
包中找到合适的类,并使用它。至于bug,我的钱是在夏季时间vs冬季时间。不是,是因为你的时区发生了什么,那天凌晨2点,在那个时区@JBNizet我不相信我在这里要找的词是“宾果”!地点是不相关的。这里重要的是时区。而且,使用java.time也无法避免这个问题。它将以不同的方式表现出来。我指的是区域设置,而不是
locale
。不管怎么说,都改了。这就是为什么它说“和”。
java.time
包强制您在需要时添加时区。您到底反对什么?“locale”一词只是指某物所在的位置,为了避免混淆,我现在将其删除。使用UTC时区肯定会使DST消失。作为
java.time
类的忠实粉丝,它们不会让夏令时(DST)及其相关挑战消失。不过,它们在夏季的行为是很明确的,因为旧类的文档有点模糊,语言环境是不相关的。这里重要的是时区。而且,使用java.time也无法避免这个问题。它将以不同的方式表现出来。我指的是区域设置,而不是
locale
。不管怎么说,都改了。这就是为什么它说“和”。
java.time
包强制您在需要时添加时区。您到底反对什么?“locale”一词只是指某物所在的位置,为了避免混淆,我现在将其删除。使用UTC时区肯定会使DST消失。作为
java.time
类的忠实粉丝,它们不会让夏令时(DST)及其相关挑战消失。尽管如此,他们在夏季的表现还是很明确的,因为旧课程的文档比较模糊。