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

发布于 2024-10-22 19:08:36 字数 314 浏览 7 评论 0原文

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

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

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

预计:7200 结果:-7200

Hopefully someone notices what is the cause for the problem I'm having.

For all other timezones such as "Europe/Helsinki" the offset calculation below returns correct values, but for some reason I get negative value for 'Etc/GMT+2' style timezones and vice versa (e.g. for Etc/GMT-2 I get positive value, 7200).

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

Expected: 7200
Result: -7200

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

薯片软お妹 2024-10-29 19:08:36

Etc/GMT+2 时区否则称为“GMT -2”或表示为 -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”。

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

The Etc/GMT+2 timezone is what would otherwise be called "GMT -2" or represented like <date time>-02:00.

This is due to the way that POSIX represents those types of timezone offsets:

The offset specifies the time value you must add to the local time to get a Coordinated Universal Time value. It has syntax like [+|-]hh[:mm[:ss]]. This is positive if the local time zone is west of the Prime Meridian and negative if it is east. The hour must be between 0 and 23, and the minute and seconds between 0 and 59.

From TZ Variable.

And:

Numeric time zone abbreviations typically count hours east of UTC, e.g., +09 for Japan and -10 for Hawaii. However, the POSIX TZ environment variable uses the opposite convention. For example, one might use TZ="JST-9" and TZ="HST10" for Japan and Hawaii, respectively. If the tz database is available, it is usually better to use settings like TZ="Asia/Tokyo" and TZ="Pacific/Honolulu" instead, as this should avoid confusion, handle old time stamps better, and insulate you better from any future changes to the rules. One should never set POSIX TZ to a value like "GMT-9", though, since this would falsely claim that local time is nine hours ahead of UTC and the time zone is called "GMT".

From Sources for Time Zone and Daylight Saving Time Data - Time notation.

梦屿孤独相伴 2024-10-29 19:08:36

来自 http://www.php.net/manual/en/timezones。其他.php#64310

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

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

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

The plus and minus signs (+/-) are not intuitive. For example,

"Etc/GMT-10" actually refers to the timezone "(GMT+10:00)
Canberra,Sydney,Melbourne".

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文