时区转换有什么问题


What is wrong with timezone conversion?

我在欧洲/维也纳时区有一个约会:

2014-10-25 08:30:00

在太平洋/中途岛时区转换为:

2014-10-24 19:30:00

当我前进一天时,转换后的小时数会发生变化:欧洲/维也纳

2014-10-26 08:30:00

太平洋/中途岛

2014-10-25 20:30:00

造成这种差异的原因是什么?

复制代码:

$date = new DateTime('2014-10-25 08:30:00', new DateTimeZone('Europe/Vienna'));
$date->setTimezone(new DateTimeZone('Pacific/Midway'));
var_dump($date->format('Y-m-d H:i:s'));
$date = new DateTime('2014-10-26 08:30:00', new DateTimeZone('Europe/Vienna'));
$date->setTimezone(new DateTimeZone('Pacific/Midway'));
var_dump($date->format('Y-m-d H:i:s'));

这与夏令时有关的原因:

在欧洲/维也纳,10月25日和26日晚上的营业时间缩短。这意味着在那个晚上还有1个小时。。因为欧洲/维也纳时区还有1个小时,太平洋/中途岛时区也会晚1个小时。。

如果你花07:30欧洲/维也纳的时间,你会得到与原来相同的结果。。

欧洲/维也纳和太平洋/中途岛之间的时差=13小时。

因此,在第一种情况下2014-10-25 08:30-13小时==2014-10-24 19:30。

对于25日=2014-10-26 8:30-13小时==2014-10-25 19:30。

但是因为欧洲/维也纳在10月25日和26日晚上实行夏令时,所以您必须增加1小时。。这就是为什么它是2014-10-25 20:30

我希望你现在明白了?