首页 文章

太平洋/斐济的Php夏令时问题

提问于
浏览
3

我试图像这样得到时区偏移量

$zone = new DateTimeZone('Europe/Oslo');
$c = new DateTime(null, $zone);
$offset = $c->getOffset();
$transitions = $zone->getTransitions(time(), time());
echo '<pre>',print_r($transitions),'</pre>';

以秒为单位返回偏移量,这很好 . 但是这个偏移对于时区'Pacific/Fiji'无法正常工作 . 对于斐济来说,它返回46800(即格林尼治标准时间13),这是不对的,应该是43200.谷歌称斐济是格林尼治标准时间12 here . 我甚至尝试将默认时区设置为欧洲/伦敦或UTC,但斐济的偏移仍然不对 . 夏令时标志($ transitions数组中的isdst索引)对于斐济是活跃的,我认为在斐济的情况下它们应该是假的,因为他们的夏令时刚刚结束 . 很少有其他时区也像美国/亚松森,美国/坎普格兰德,美国/圣保罗,澳大利亚/阿德莱德等一样活跃,但他们所有的抵消都是正确的 .

斐济的抵消仍然显示格林威治标准时间13而不是格林尼治标准时间12的任何原因?我整天搜索论坛而不是一个线索 .

附:斐济:当地日光时间即将到达2015年1月18日星期日时,03:00:00时钟倒转1小时到2015年1月18日星期日,02:00:00当地标准时间 .

1 回答

  • 1

    最近在基础数据中改变了斐济的DST结束转换(它们的“后退”转换) . 它原定于1月24日结束,但提前一周移至1月17日,以配合斐济政府的公告 .

    此更改在IANA tz数据库2015g版本(release notes here)中颁布 . 对于PHP,您可以在the timezonedb pecl package的2015.7版本中找到它 . 这是在2015-10-03发布的,PHP总是在每次PHP发布之前获取最新的timezonedb . 因此,如果您更新到PHP版本5.6.14或更高版本(或开发预览轨道上的7.0.0 RC5),那么您将自动进行更改 . 否则,你可以update timezonedb manually .

    一般来说,如果您的应用程序依赖于本地时间的准确性(尤其是调度方案),那么您应该订阅Announcements邮件列表at IANA,以便了解可能影响您的系统的更改,然后观察进入库,框架的下层更改,和操作系统,以确保及时应用它们 . 否则,您可能会遇到与您描述的不一致的风险 .

相关问题