Ruby gem用于查找位置的时区

Nic*_*ick 28 ruby gem timezone location web-services

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

Pan*_*kos 39

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

以下是使用GeoKitTimeZone的示例.

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
Run Code Online (Sandbox Code Playgroud)

  • 如果您具有纬度和经度,则可以使用[nearest_time_zone gem](https://github.com/buytruckload/nearest_time_zone)查找时区的名称,而无需进行任何Web服务调用. (4认同)

Pet*_* O. 9

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

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

如该答案所述,您应该:

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

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

  • [nearest_time_zone](https://github.com/buytruckload/nearest_time_zone)就是这么做的.我在阅读完这个答案之后就做到了,因为我不想在调用Web服务时受到性能损失. (7认同)