时区转换有什么问题?

时间:2014-11-03 12:40:38

标签: php timezone

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

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'));

1 个答案:

答案 0 :(得分:1)

这是夏令时相关的原因:

在欧洲/维也纳,时间在10月25日和26日晚上减少。这意味着在那个晚上还有1个小时..因为在欧洲/维也纳时区还有1个小时,太平洋/中途时区也将是1个小时..

如果您按小时07:30欧洲/维也纳,您将获得与原始相同的结果..

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

所以在第一个案例2014-10-25 08:30 - 13hrs == 2014-10-24 19:30。

25日= 2014-10-26 8:30 - 13hrs == 2014-10-25 19:30。

但是因为欧洲/维也纳在10月25日和26日晚上有DST,你需要加1小时..所以这就是为什么它是2014-10-25 20:30

我希望你现在明白了吗?