Ruby gem用于查找位置的时区

我有一个位置(城市,州),日期和时间,我想将其转换为utc,但需要先找到该位置的时区。 我做了一些研究,一切似乎都指向地球工具或地理名称,但两个网络服务似乎只是纬度和经度。 是否有服务或gem或任何其他方式根据这种位置格式找到时区? 或者如何将位置转换为纬度和经度?

您可以使用Google地图地理编码API轻松获取纬度和经度。 像GeoKit这样的API有ruby实现。 一旦你有了这个,你可以使用时区gem轻松获得经度和纬度的时区。 gem还可以轻松地在您的时区进行时间转换。

以下是使用GeoKit和TimeZone的示例。

require 'geokit' require 'timezone' res = Geokit::Geocoders::GoogleGeocoder.geocode('140 Market St, San Francisco, CA') timezone = Timezone::Zone.new(:latlon => res.ll) timezone.zone => "America/Los_Angeles" timezone.time Time.now => 2011-12-01 14:02:13 UTC 

对于问题的第二部分,请参阅此问题的已接受答案:

从纬度/经度确定时区,而不使用像Geonames.org这样的网络服务

如该答案所述,您应该:

  • 从geonames.org下载城市数据库
  • 将其转换为紧凑的lat / lon – >时区列表
  • 使用R-Tree实现有效地查找最近的城市(或更确切地说,它的时区)到给定的坐标

还要记住,许多美国州属于单一时区,这应该使工作更容易。

您可以自己拨打地理定位服务,例如Google地图,将City,State转换为纬度和经度。 还有开放的数据库种子,可以为您提供世界各地城市的纬度和经度。 您可以创建一个位置模型,并使用其中一个对该表进行种子处理。

您可以在这里免费下载地理位置数据: http : //www.maxmind.com/app/geolitecity

检查此gem: https : //github.com/sck-v/google_timezone

它使用谷歌时区api按已知的纬度和经度确定时区

有关使用Google API( https://developers.google.com/maps/documentation/timezone/ )的版本,请访问https://gist.github.com/4676207查看要点。 与Geocoder gem一起,您可以轻松找到所有时区ID 🙂