Australia DST timezone abbreviation incorrect when using date_default_timezone_set
我正在尝试使用PHP的date_default_timezone_set函数在不同的时区中表示UTC时间戳。 刚刚开始夏令时(新西兰)和澳大利亚的夏令时,我的结果好坏参半......
这是一些测试代码......
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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>'; |
从中得到这个输出......
1 2 3 4 5 6 7 |
现在,新西兰时区的缩写是正确的(NZDT),所有澳大利亚时代都是正确的,但是两个澳大利亚时代的夏令时是活跃的(如php日期'I'格式字符所示,如果是'I',则返回'1'如果 夏令时到位)仍显示非DST缩写。
有任何想法吗?
一些东西:
-
您应该尽可能选择时区名称的规范形式。您提到的区域实际上是链接(也称为别名)。有关详细信息,请参阅此图表。特别:
1
2
3
4NZ => Pacific/Auckland
Australia/NSW => Australia/Sydney
Australia/North => Australia/Darwin
Australia/South => Australia/Adelaide -
澳大利亚实际上有5个主要地区有不同的时区规则。您可能希望参考此Wikipedia文章了解详细信息。
-
Australia/Darwin (aka,Australia/North )根本没有观察夏令时。 -
其他两个时区(悉尼和阿德莱德)确实将在您指定的日期和时间进行夏令时。但是,澳大利亚时区的名称和缩写并不一定非常清楚。例如,悉尼的日光名称已被以下所有内容引用:
- 东部夏令时间(EST)
- 澳大利亚东部夏令时(AEST)
- 东部夏令时(EDT)
-
澳大利亚东部夏令时(AEDT)
-
PHP从IANA时区数据库中提取其时区。时区缩写也取自同一来源。很长一段时间,这个数据集在东部标准时间和东部夏令时都使用了"EST"的模糊缩写。
-
这在2014f版本中最近发生了变化。您可以阅读发行说明中的??详细信息。它现在使用AEST作为标准时间,AEDT作为白天时间。
-
您可以通过将PHP的timezonedb更新到2014.6或更高版本来获得此更改。您可以在此处或此处找到更新说明。
-
或者,您可以更新到最新版本的PHP。根据发布日期,我认为PHP版本5.3.29应该与timezonedb 2014.6一起发布。使用该版本或更新版本,您应该获得新的缩写。
-
您也可以致电
timezone_version_get() 查看您拥有的timezonedb版本。收到新的缩写应该是2014.6或更高。