我正在尝试使用PHP的date_default_timezone_set函数在不同的时区中表示UTC时间戳。在这里(新西兰)和澳大利亚,夏令时刚刚开始,我的结果好坏参与......
这是一些测试代码......
date_default_timezone_set('NZ');
print '<p>NZ time is ' . date('Y-m-d H:i:s T (I)') . '</p>';
date_default_timezone_set('Australia/NSW');
print '<p>NSW time is ' . date('Y-m-d H:i:s T (I)') . '</p>';
date_default_timezone_set('Australia/North');
print '<p>NT time is ' . date('Y-m-d H:i:s T (I)') . '</p>';
date_default_timezone_set('Australia/South');
print '<p>SA time is ' . date('Y-m-d H:i:s T (I)') . '</p>';
我从中得到这个输出......
NZ time is 2014-10-05 14:04:27 NZDT (1)
NSW time is 2014-10-05 12:04:27 EST (1)
NT time is 2014-10-05 10:34:27 CST (0)
SA time is 2014-10-05 11:34:27 CST (1)
现在,新西兰时区缩写是正确的(NZDT),并且所有澳大利亚次都是正确的,但是两个澳大利亚时间夏令时是活跃的(如php日期'我'所示格式字符,如果夏令时到位,则返回“1”仍然显示非DST缩写。
有什么想法吗?
答案 0 :(得分:5)
一些事情:
您应该尽可能选择时区名称的规范形式。您提到的区域实际上是链接(又名别名)。有关详细信息,请参阅this chart。具体做法是:
NZ => Pacific/Auckland
Australia/NSW => Australia/Sydney
Australia/North => Australia/Darwin
Australia/South => Australia/Adelaide
澳大利亚实际上有5个主要地区有不同的时区规则。您可以参考this Wikipedia article了解详情。
Australia/Darwin
(又名,Australia/North
)完全没有遵守夏令时。
其他两个时区(悉尼和阿德莱德)确实会在您指定的日期和时间进行夏令时。但是,澳大利亚时区的名称和缩写并不一定非常清楚。例如,悉尼的日光名称已被以下所有内容引用:
PHP从IANA time zone database中提取时区。时区缩写也取自同一来源。很长一段时间,这个数据集在东部标准时间和东部夏令时都使用了“EST”的模糊缩写。
最近在版本2014f 中进行了更改。您可以在the release notes中阅读详细信息。它现在使用AEST作为标准时间,AEDT使用白天时间。
您可以通过将PHP的timezonedb更新为2014.6或更高版本来获得此更改。您可以找到有关更新here或here。
或者,你可以update to the latest version of PHP。根据发布日期,我认为 PHP版本5.3.29应该随timezonedb 2014.6一起提供。使用该版本或更新版本,您应该获得新的缩写。
您也可以致电timezone_version_get()
查看您拥有的timezonedb版本。收到新的缩写应该是2014.6或更高。