最后一个星期天我们改变了中欧的时间(-1h)。但我正在进行一些测试,并且java时间解析器出了问题。这是代码
UTC: 2016-10-09 12:50:00
Lisboa: 2016-10-09 12:50:00
Madrid: 2016-10-09 14:50:00
Paris: 2016-10-09 14:50:00
这是输出
StoppableThread
为什么UTC和马德里时间的差异是2小时?现在在马德里是UTC + 1。
感谢。
答案 0 :(得分:4)
时间是正确的,因为时钟在10月30日凌晨2点发生了变化
如果您将代码更改为此
String dateUtc = "2016-11-09 12:50:00";
你得到这个输出,给出正确的1小时差异。
UTC: 2016-11-09 12:50:00
Lisboa: 2016-11-09 12:50:00
Madrid: 2016-11-09 13:50:00
Paris: 2016-11-09 13:50:00
时区是由于日期对象实际引用的时间。所以那个时候是正确的
答案 1 :(得分:2)
法语接受的答案是正确的。这些值与夏令时(DST)中的转换重叠。
我只是指出你的代码使用旧的日期时间类,现在是旧的,取而代之的是java.time类。
将输入值解析为LocalDateTime
,因为它缺少任何时区指示符或与UTC的偏移量。
用T
替换中间的SPACE,以符合java.time类中默认用于解析/生成字符串的ISO 8601格式。
LocalDateTime ldt = LocalDateTime.parse( "2016-10-09 12:50:00".replace( " " , "T" ) );
我们从业务环境中知道UTC是用于此输入字符串的。因此,指定UTC的偏移量。
OffsetDateTime odt = ldt.atOffset( ZoneOffset.UTC );
通过应用ZoneId
来调整时区以获得ZonedDateTime
。
ZoneId z = ZoneId.of( "Europe/Lisboa" );
ZonedDateTime zdt = odt.atZoneSameInstant( z );