是否可以在Php中设置DateTime对象的DST?
我在DST更改的确切时刻遇到日期问题。
在欧洲/巴黎时区,日期2016-10-30 02:00:00
存在两次(因为这是夏令时的确切时刻(凌晨3点再次凌晨2点)
让我们考虑一下这段代码:
$dateString = '2016-10-30 01:30:00';
$dateBefore = \DateTime::createFromFormat('Y-m-d H:i:s', $dateString, new DateTime('Europe/Paris'));
$dateBefore->setTimeZone(new \DateTimeZone('UTC'));
$dateString = '2016-10-30 02:30:00';
$dateAfter = \DateTime::createFromFormat('Y-m-d H:i:s', $dateString, new DateTime('Europe/Paris'));
$dateAfter->setTimeZone(new \DateTimeZone('UTC'));
$dateBefore
是' 2016-10-29 23:30:00'
$dateAfter
是' 2016-10-30 01:30:00'
那么如何生成日期' 2016-10-30 00:30:00'这里吗?
是否可以做这样的事情?
$winterTZ = new DateTime('Europe/Paris');
$winterTZ->setDST(false);
$winterDate = \DateTime::createFromFormat('Y-m-d H:i:s', $dateString, $winterTZ);
$summerTZ = new DateTime('Europe/Paris');
$summerTZ->setDST(true);
$winterDate = \DateTime::createFromFormat('Y-m-d H:i:s', $dateString, $summerTZ);
谢谢!
答案 0 :(得分:0)
正如我想象你从研究中看到的那样,时区处理是complicated matter,当你处理DST时更是如此。您的用例不是那么清楚,但您可以通过添加1小时间隔来实现您的要求(这很重要:不仅仅是小时,而是小时间隔到了时间。然后,{{ ip_addresses|ipaddr('host') }}
实例将考虑DST并仍然给你正确的小时(即,不“跳过”它):
DateTime