【发布时间】:2014-10-26 23:38:59
【问题描述】:
在遵守夏令时的时区,时钟通常:
- 在从冬天到夏天的过渡期间向前移动
- 在从夏季到冬季的过渡期间被退回
例如,在Europe/Paris 时区,在从summer 到winter 的过渡期间,UTC 偏移量从+02:00 更改为+01:00,在3:00 AM 十月的最后一个星期日。
换句话说:
在2014-10-26 上的3:00 AM (+02:00),时钟设置回2:00 AM (+01:00)。
这意味着在Europe/Paris 时区的02:30 AM 处为2014-10-26 创建一个DateTime 是不明确的,因为它可以表示:
-
2014-10-26T02:30+01:00(时间戳1414287000) -
2014-10-26T02:30+02:00(时间戳1414283400)
Java 的ZonedDateTime documentation 很好地解释了这个问题,并且他们的 API 提供了一种方法来在需要时选择首选偏移量。
然而,在 PHP 中,似乎可以通过任意选择 winter 时间来解决这种歧义:
$dt = new DateTime('2014-10-26T02:30', new DateTimeZone('Europe/Paris'));
echo $dt->format(DateTime::ISO8601); // 2014-10-26T02:30:00+0100
echo $dt->getTimestamp(); // 1414287000
echo $dt->getOffset(); // 3600
echo $dt->getTimeZone->getName(); // Europe/Paris
(武断地,我的意思是我找不到任何关于它的文档)。
在根据给定时区的 DST 重叠范围内的日期和时间创建 DateTime 时,有没有办法选择首选偏移量?
或者换句话说:
如何创建具有以下特征的DateTime 对象:
echo $dt->format(DateTime::ISO8601); // 2014-10-26T02:30:00+0200
echo $dt->getTimestamp(); // 1414283400
echo $dt->getOffset(); // 7200
echo $dt->getTimeZone->getName(); // Europe/Paris
也就是说,在 夏季 时间的Europe/Paris 时区中表示此日期/时间的对象?
【问题讨论】: