希望有人注意到是什么导致了我的问题。
对于所有其他时区,如“欧洲/赫尔辛基”,下面的偏移量计算返回正确的值,但由于某些原因,对于“etc/gmt+2”样式的时区,我得到负值,反之亦然(例如,对于etc/gmt-2,我得到正值7200)。

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

预期:7200
结果:-7200

最佳答案

Etc/GMT+2时区就是所谓的“gmt-2”,或者用<date time>-02:00来表示。
这是因为POSIX表示这些时区偏移类型的方式:
偏移量指定必须添加到本地时间以获得协调的通用时间值的时间值。它的语法类似于[+-]hh[:mm[:ss]]。如果当地时区位于本初子午线以西,则为正值;如果当地时区位于东面,则为负值。小时必须介于0和23之间,分和秒必须介于0和59之间。
从AA>
还有:
数字时区缩写通常计算UTC以东的小时数,例如日本为+09,夏威夷为-10。但是,posix tz环境变量使用相反的约定。例如,可以分别为日本和夏威夷使用tz=“jst-9”和tz=“hst10”。如果TZ数据库是可用的,通常最好使用诸如TZ =“亚洲/东京”和TZ =“太平洋/火奴鲁鲁”这样的设置,因为这样可以避免混乱,更好地处理旧的时间戳,并且更好地隔离未来的规则。但是,永远不要将posix tz设置为“gmt-9”这样的值,因为这会错误地宣称本地时间比utc早9小时,时区称为“gmt”。
从AA>

07-24 12:41
查看更多