PHP-为没有时区名称的区域(海洋位置)设置默认时区偏移量

我正在编写使用时区的PHP应用程序。对于基于陆地的GPS,我使用

date_default_timezone_set();

的正确名称,例如Europe/Dublin。但是,如果GPS位置不在陆地上但在海上,则没有时区名称,但是时间与UTC有所偏差。计算是近似值。 15小时经度1小时。我已经手动计算了UTC偏移量,但是无法将其设置为PHP。我正在使用date方法从UNIX时间戳打印人类可读的日期。

我发现还有其他时区名称(https://www.php.net/manual/en/timezones.others.php),例如Etc/GMT+10,但是PHP文档指出了这一点:

  

警告,请不要使用此处列出的任何时区(除UTC以外),   仅出于向后兼容的原因而存在,并且可能暴露错误   行为。

使用基于Etc的偏移量是否安全?还是有其他安全的解决方案?我还没有找到。在date_default_timezone_set()的评论中,有人“使用”此词:https://www.php.net/manual/en/function.date-default-timezone-set.php#96551,但看起来很丑。

我正在使用PHP 7.1。

c17789642 回答:PHP-为没有时区名称的区域(海洋位置)设置默认时区偏移量

PHP中的时区源自IANA tz database

尤其是Etc/GMT+10之类的区域源自tz数据which says(强调我的)中的etcetera文件:

  

...这些天,   tz文件几乎涵盖了所有有人居住的地区,并且   现在需要用于非UTC的条目是用于海上船舶   无法使用POSIX TZ设置。

因此,您确实可以并且应该将它们用于您描述的目的。

请记住,它们仅在从Etc/GMT-14Etc/GMT+12的整小时偏移中存在,并且区域名称中的符号与标准约定相反。换句话说,Etc/GMT+10实际上是UTC-10。

另一个说明。我的理解是,海上船舶在陆地附近的领海时通常会使用陆上时区,包括有效的夏令时调整。例如,在美国沿太平洋沿海水域内行驶的船舶,应在冬季更改其时钟以使用PST(UTC-8),在夏季使用PDT(UTC-7)。这由America/Los_Angeles建模,而纯纵向计算将使用UTC-8全年(Etc/GMT+8)。

所有这些都是灵活的,因为船长基本上可以自行决定船上时间。有关更多详细信息,请参见Wikipedia在nautical time上的文章。

您可能还想read here了解使用GPS坐标解析IANA时区的方法。那些使用Time Zone Boundary Builder项目作为数据源的人(例如the Geo-Timezone PHP library)受益于航海时间和领海。

本文链接:https://www.f2er.com/3108727.html

大家都在问