【问题标题】:php DateTimeZone->getOffset() returns invalid offset for GMT timezonesphp DateTimeZone->getOffset() 返回 GMT 时区的无效偏移量
【发布时间】:2011-03-17 13:18:42
【问题描述】:

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

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

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

预期:7200 结果:-7200

【问题讨论】:

    标签: php datetime datetimeoffset


    【解决方案1】:

    Etc/GMT+2 时区在其他情况下被称为“GMT -2”或表示为 <date time>-02:00

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

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

    【讨论】:

      【解决方案2】:

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

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

      “Etc/GMT-10”实际上是指时区“(GMT+10:00) 堪培拉、悉尼、墨尔本”。

      【讨论】:

      • 谢谢。尽管我对此进行了一些调查,但在发布我的问题后,我最终还是到了同一页面:“所有*nix系统都有这个问题:ETC/GMT-10表示GMT+10:00,php只使用*nix的规则“解释”
      猜你喜欢
      • 2016-11-25
      • 2013-05-07
      • 1970-01-01
      • 1970-01-01
      • 2012-11-28
      • 2012-02-26
      • 2015-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多