54

是否有某种(或任何其他方式)的网络服务来提取(美国)城市的当前时区设置。对于该国不遵循夏令时并且在其他人都在切换夏季/冬季时间时基本上会跳转时区的部分地区......我不喜欢创建自己的不遵循 DST 的地方的数据库。有没有办法按需提取这些数据?

我需要这个用于数据库服务器(而不是客户端工作站) - 存储在数据库中的实体具有 City、State 作为属性。我需要随时知道这些实体的当前时区。

4

8 回答 8

74

我们遇到了同样的问题,除了上面的好建议外,谷歌似乎有两个互补的 API,一个用于来自地理编码(纬度/经度)数据的时区和地理编码 API。

例如,要获取旧金山的时区和偏移量:

1) 将城市转换为地理编码位置:

http://maps.googleapis.com/maps/api/geocode/json?address=San%20Francisco,+CA&sensor=false

地理编码位置在 JSON 返回数据中:

"location": {
    "lat":  37.77492950,
    "lng": -122.41941550
}

2) 将地理编码位置转换为本地时区和偏移量(如果有):

https://maps.googleapis.com/maps/api/timezone/json?location=37.77492950,-122.41941550×tamp=1331161200&sensor=false

返回当前时区信息:

{
          "status": "OK",
       "dstOffset":  0.0,
       "rawOffset": -28800.0,              
      "timeZoneId": "America/Los_Angeles",
    "timeZoneName": "Pacific Standard Time"
}

一个地区的时区可能会因多种原因而改变。所以最好找一个权威的基于服务器的解决方案而不是缓存。有关更多信息,请参阅Wikipedia 的时区文章

于 2013-02-20T19:33:12.343 回答
47

earthtools.org 提供了一个免费的网络服务来从这里获取一个城市的时区:

http://www.earthtools.org/webservices.htm#timezone

您只需像这样传入 long/lat 值:(这是针对纽约的)

http://www.earthtools.org/timezone-1.1/40.71417/-74.00639


编辑:

好像earthtools 已经关闭了。Google Time Zone API 是一个不错的选择(在 2008 年回答这个问题时不存在)。要使用它,您必须首先在您的帐户上激活 Time Zone API 。如果您保持在以下限制以下,则免费:

  • 每 24 小时有 2500 个请求。
  • 每秒 5 个请求。

该文档可在 Google Developers 上找到。

于 2008-09-11T06:43:53.320 回答
16

Geonames.org 有一组精彩的世界数据,可通过网络服务或下载获得:

http://www.geonames.org/export/ws-overview.html

尤其

http://www.geonames.org/export/web-services.html#timezone

.

于 2008-09-11T07:14:13.733 回答
7

Earthtool 的时区信息不是最新的……例如,斯里兰卡当前的偏移量是 GMT 的 +5.5,但 EarthTools 显示为 +6,这是 2005 年之前的旧偏移量。

我建议GeoNames.org

于 2011-11-24T08:56:28.867 回答
5

WorldTimeServer.com似乎有一个综合时区数据库,您可以购买各种格式的访问权限,包括用于 Web 的 .NET 组件。

没有联系,只是最近自己研究了同样的事情。

于 2008-09-11T06:43:56.660 回答
2

简单的离线库:APTimeZones

为了找到某个位置的时区,您可以使用 Google Maps API 的时区 API。不幸的是,这需要您查询远程服务,并且您会受到它们的限制。

这是一个名为APTimeZones的库 rom Alterplay (已附加 Git),它允许您从给定位置提取 NSTimeZone 而无需连接到远程服务。 APTimeZones通过查询本地时区列表(包含在库中)来工作。

于 2014-06-02T12:23:20.730 回答
1

万一有人碰到这个问题。

  • 您可以使用 Google API 搜索地址。这将返回纬度/对数。有了这些值,您可以使用例如 PHP 找到最近的时区。

  • 或者您可以使用类似 timezoneapi.io 的 API(我支持它),它使您能够搜索地址/城市/国家/地区。它返回给定时区的地址、时区信息和当前日期/时间。

https://timezoneapi.io/developers/address

于 2017-01-05T01:27:30.950 回答
0

我知道这已得到解答,但我发布此答案是因为人们可能仍然觉得它有用 - 所选答案现在无法成功运行。

Google 有自己的服务,非常可靠且易于使用,并以 JSON 格式输出信息。它甚至允许指定自定义时间,例如获取马耳他 02/02/2013 的时区。

https://developers.google.com/maps/documentation/timezone/

于 2013-04-26T16:30:17.703 回答