我正在使用http://ipinfodb.com/ api以获得用户lat / long ... I have用户时区采用数组格式。该数组返回以下信息......
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等等时,我如何找到用户当前时间
答案 0 :(得分:4)
“时区”不是偏移量!令我困扰的是,这么多的API会导致这个常见的错误。不要被返回字段称为“timeZone”的事实所迷惑。
“时区”是一年中可以有一个或多个抵消的区域。您可以解决时区和日期的偏移量,但不能转向另一个方向! A list of TZDB time zones is here
具体时区为America/Vancouver
- 不是因为您的纬度/经度与温哥华市相匹配,而是因为温哥华恰好是您所在地区时区的参考城市。并非每个城市都有自己的时区ID,因此您无法做出任何假设。
-07:00是America/Vancouver
时区的当前偏移量。它恰好是夏令时抵消。当夏令时结束时,它将变为-08:00
。您使用的特定Web服务似乎不会显示此信息。
StackOverflow上还有其他几个问题已经回答了如何从lat / lon解析实际时区。您可以调用Web服务,也可以使用自己的数据库。以下是一些链接:
我相信还有更多。我很想把它作为副本关闭,但我之前没有看过ipinfodb.com。
如果您确定您的API返回当前偏移量,并且您只想要用户的当前时间,那么正如Jonathon在问题评论中指出的那样,您可以只需将偏移应用于当前UTC时间,您就会知道该位置的时间。但你每次都必须这样做。您无法保存该偏移量并在以后再次使用它。为此,您需要完整的时区参考。