php DateTimeZone-> getOffset()返回GMT时区的无效偏移量

时间:2011-03-17 13:18:42

标签: php datetime datetimeoffset

希望有人注意到我遇到问题的原因是什么。

对于所有其他时区,例如“Europe / Helsinki”,下面的偏移计算返回正确的值,但由于某种原因,我得到'Etc / GMT + 2'样式时区的负值,反之亦然(例如对于Etc / GMT- 2我得到正值,7200)。

$dateTimeZone = new DateTimeZone('Etc/GMT+2');
echo $dateTimeZone->getOffset(new DateTime("now", new DateTimezone( 'UTC' )));

预计:7200 结果:-7200

2 个答案:

答案 0 :(得分:5)

Etc/GMT+2时区原本称为“GMT -2”或表示为<date time>-02:00

这是由于POSIX表示这些类型的时区偏移的方式:

  

偏移量指定必须添加到当地时间以获取协调世界时值的时间值。它的语法类似于[+ | - ] hh [:mm [:ss]]。如果当地时区在Prime Meridian以西,则为正,如果在东部,则为负。小时必须介于0到23之间,分钟和秒介于0到59之间。

     

来自TZ Variable

  

数字时区缩写通常计算UTC以东的小时数,例如,日本为+09,夏威夷为-10。但是,POSIX TZ环境变量使用相反的约定。例如,可以分别对日本和夏威夷使用TZ =“JST-9”和TZ =“HST10”。如果tz数据库可用,通常最好使用TZ =“Asia / Tokyo”和TZ =“Pacific / Honolulu”等设置,因为这样可以避免混淆,更好地处理旧时间戳,并使您更好地隔离未来的规则变化。不应该将POSIX TZ设置为类似“GMT-9”的值,因为这会错误地声称当地时间比UTC早9小时,时区称为“GMT”。

     

来自Sources for Time Zone and Daylight Saving Time Data - Time notation

答案 1 :(得分:1)

来自http://www.php.net/manual/en/timezones.others.php#64310

  

加号和减号(+/-)不直观。例如,

  

“Etc / GMT-10”实际上是指时区“(格林尼治标准时间+10:00)   堪培拉,悉尼,墨尔本“。