3

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

对于所有其他时区,例如“欧洲/赫尔辛基”,下面的偏移计算返回正确的值,但由于某种原因,我得到了“Etc/GMT+2”风格时区的负值,反之亦然(例如,对于 Etc/GMT-2,我得到正值,7200)。

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

预期:7200 结果:-7200

4

2 回答 2

5

Etc/GMT+2时区是否则称为“GMT -2”或表示为<date time>-02:00.

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

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

来自TZ 变量

和:

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

来自时区和夏令时数据的来源 - 时间表示法

于 2011-03-17T13:30:51.760 回答
1

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

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

“Etc/GMT-10”实际上是指时区“(GMT+10:00) Canberra,Sydney,Melbourne”。

于 2011-03-17T13:23:29.440 回答