Jou*_*uko 3 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' )));
Run Code Online (Sandbox Code Playgroud)
预期:7200结果:-7200
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".