根据IANA时区数据库,是否有一个包含位置->时区名称的数据库?

6
在我的脚本(PHP)中,我在我的数据库中为每个位置使用tz数据库标签: http://en.wikipedia.org/wiki/Tz_database 我正在输入来自世界各地的一系列地点(国家、省份、州、城市等),但对于每个地点,我很难知道应该使用IANA时区数据库中的哪个标签。
在维基百科上搜索该位置会给我提供时间偏移量(UTC+n)和时区缩写(EST等),但这些都不能帮助我知道应该使用tz数据库中的哪个条目。
例如: 华盛顿特区使用的是"America/New_york",至少我最好的猜测是这样的。
达拉斯, 德克萨斯州使用"America/Chicago"(除非我错了!)
还有一个小国家,其首都和最大城市都不在tz数据库中。应该使用哪个tz条目呢?
必须有一个数据库或资源能够清晰地链接地球上的每个位置(国家、州、省、城市等)与tz数据库中的特定条目。我该去哪里找呢?
3个回答

5

结合Google地图API可以很好地工作,例如使用以下API从地址获取位置。

地址为“Mountain View, CA, US”。

https://maps.googleapis.com/maps/api/geocode/json?address=Mountain+View,+CA,+US&key=YOUR_API_KEY

此URL返回JSON,类似于以下内容:

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "Mountain View",
               "short_name" : "Mountain View",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Santa Clara County",
               "short_name" : "Santa Clara County",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "California",
               "short_name" : "CA",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "United States",
               "short_name" : "US",
               "types" : [ "country", "political" ]
            },
            {
               "long_name" : "94043",
               "short_name" : "94043",
               "types" : [ "postal_code" ]
            }
         ],
         "formatted_address" : "Mountain View, CA 94043, USA",
         "geometry" : {
            "location" : {
               "lat" : 37.4224764,
               "lng" : -122.0842499
            },
            "location_type" : "GEOMETRIC_CENTER",
            "viewport" : {
               "northeast" : {
                  "lat" : 37.4238253802915,
                  "lng" : -122.0829009197085
               },
               "southwest" : {
                  "lat" : 37.4211274197085,
                  "lng" : -122.0855988802915
               }
            }
         },
         "place_id" : "ChIJ2eUgeAK6j4ARbn5u_wAGqWA",
         "types" : [ "street_address" ]
      }
   ],
   "status" : "OK"
}

你可以从JSON中提取位置信息并调用时区API来获取时区。

API调用示例:

 https://maps.googleapis.com/maps/api/timezone/json?location=39.6034810,-119.6822510&timestamp=1331161200&key=YOUR_API_KEY

返回类似以下的JSON:
{
   "dstOffset" : 0,
   "rawOffset" : -28800,
   "status" : "OK",
   "timeZoneId" : "America/Los_Angeles",
   "timeZoneName" : "Pacific Standard Time"
}

2
我已经用这个创建了一个应用程序,谢谢:https://gist.github.com/mnpenner/9996ac32a394caffd859610b39d76160 - mpen

2
您可能考虑的一种方法是找到所讨论位置的纬度和经度。然后,您可以使用此链接中描述的方法之一查找这些坐标的适用时区。

1
到目前为止我找到的最好的是这个:
http://twiki.org/cgi-bin/xtra/tzdatepick.html 但它只有城市。
例如,它列出了巴黎,但没有列出法国。如果整个国家包含在一个时区中(例如,法国的任何城市都将列在Europe/Paris下),那么我想知道它。
没有列出爱达荷州(分属两个时区),也没有列出莫斯科,爱达荷州。
我正在使用以下来源来查找美国: http://en.wikipedia.org/wiki/List_of_U.S._states_by_time_zone 但对于任何州和城市都需要很多猜测。
这个列表几乎无法使用,但这是我迄今为止得到的最好的:
http://en.wikipedia.org/wiki/List_of_tz_database_time_zones 莫斯科,爱达荷州?
印第安纳州福特韦恩?
当我们不认识所说的地点时,从上面的列表中很难确定。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接