1

我正在使用http://ipinfodb.com/ api 来获取用户纬度/经度... 我有用户时区,格式为数组。该数组返回以下信息...

array(11) { 
     ["statusCode"]=> string(2) "OK"... 
     ["countryCode"]=> string(2) "CA" 
     ["countryName"]=> string(6) "CANADA" 
     ["regionName"]=> string(16) "BRITISH COLUMBIA" 
     ["cityName"]=> string(8) "VANCOUVER" ....
     ["timeZone"]=> string(6) "-07:00" 
}

使用来自数组的信息,当我的时区格式为 -07:00、04:00 等时,我将如何找到用户的当前时间

4

1 回答 1

4

“时区”不是偏移量!这么多 API 犯了这个常见的错误,这让我很困扰。不要被返回字段称为“timeZone”的事实所迷惑。

“时区”是全年可以有一个或多个偏移量的区域。您可以解决时区和日期的偏移量,但不能反其道而行之! TZDB 时区列表在这里

具体时区将是America/Vancouver- 不是因为您的纬度/经度与温哥华市匹配,而是因为温哥华恰好是您所在时区的参考城市。并非每个城市都有自己的时区 ID,因此您不能做出任何假设。

-07:00 是时区的当前偏移量America/Vancouver。它恰好是夏令时偏移量。当夏令时结束时,它将变为-08:00. 您正在使用的特定网络服务似乎不会显示此信息。

StackOverflow 上还有其他几个问题已经回答了如何从纬度/经度解析实际时区。您可以调用 Web 服务,也可以使用自己的数据库。以下是一些链接:

我敢肯定还有更多。我很想把它作为一个副本关闭,但我之前没有看到 ipinfodb.com 被引用过。

如果您确定您的 API 返回当前偏移量,并且您只想要用户的当前时间,那么正如 Jonathon 在问题评论中指出的那样,您只需将偏移量应用于当前 UTC 时间,您就会知道时间在那个位置。但是你每次都必须这样做。您无法保存该偏移量并稍后再次使用它。为此,您需要完整的时区参考。

于 2013-04-17T21:25:39.893 回答