我需要一个城市到时区的映射列表 - 获得它的最佳方式?

时间:2008-11-04 16:10:24

标签: timezone

我有一系列城市,州/省和国家/地区,我需要轻松找到各自的时区。具体来说,我需要知道他们映射到哪个Windows TimeZone。到目前为止,这是一个艰难的过程,因为没有简单的方法可以将城市传递给某个东西并获得时区(时区是一个偏移量,时区是否支持夏令时)。

当前流程是使用http://www.batchgeocode.com获取城市的纬度/经度(实际上称为Yahoo服务),然后调用http://www.EarthTools.org以获取时区字母,该字母映射到偏移量。问题是雅虎服务有时会返回糟糕的经度/纬度,而earthtools.org对DST信息知之甚少,因此映射到正确的TimeZone Id是一个繁琐的手动过程。

我不能成为第一个做到这一点的人 - 有没有人知道更好的方法,或者有哪些列表有我需要的信息?

感谢。

4 个答案:

答案 0 :(得分:37)

有趣的问题!其他三个SO帖子(4150455901237023)提到了几个潜在客户。有Olson database(请参阅Wikipedia entry进行说明),但它看起来更算法/程序化(例如,如果您知道一个县名,那么Indiana中的某些县就有一个规则)

我试着看看EarthTools,但它failed代表St.Pierre/Miquelon,这是一个很好的测试案例(-3:00而不是附近纽芬兰的-3:30,这是EarthTools所说的)。 / p>

一些有前途的选择:worldtimeengine.com有一个免费的交互式版本和一个看起来很便宜的API(每英镑5000个查询),但API只包括lat,long查询作为输入(不是作为输入的位置,这是交互式版本的内容。

最佳潜在客户:我会看一下geonames.org,看起来它有一个很好的丰富的API,你可以使用它们,它们都有一个免费(慢)版本和一个商业版,以获得更好的性能。

P.S。这里有一些很好的测试用例(来自worldtimezone.comWikipedia's list of timezonesmap of time zones也是说明性的):

  • 加拉加斯,委内瑞拉(-4:30)
  • 甘德,纽芬兰(-3:30)
  • 伊朗德黑兰(+3:30)
  • 阿富汗喀布尔(+4:30)
  • 尼泊尔加德满都(+5:45)
  • 缅甸仰光(+6:30)
  • 新西兰查塔姆群岛(+12:45)
  • 复活节岛(-6)
  • ST。皮埃尔和密克隆(-3)
  • 斯坦利,福克兰群岛(-4)
  • 印第安纳州埃文斯维尔(-6 =中环)
  • 安大略省,俄勒冈州(-7 =山区)

答案 1 :(得分:2)

moment-timezone是用于时区计算的JavaScript库。

所有关联国家,时区和抵消的时区数据均为available in json format

答案 2 :(得分:1)

我们使用 .NET C#MVC ,我们需要为每个国家/地区列出 Windows时区

因此,对于每个注册用户,我们都可以自动设置时区。

大多数在线数据库提供 IANA 时区,并且很难映射到特定国家/地区。

使用NodaTime我们设法创建了一个列出以下条目的Json。

CountryName
2LetterIsoCountryCode
3LetterIsoCountryCode
IANATimezones
WindowsTimezones

您可以下载生成的JSON here

答案 3 :(得分:0)

我可以帮助您完成当前工作流程的第二部分。我编写了一个将lat / long映射到时区的Java库,其中数据库是在源代码中编码的。

源代码基本上是一个巨大的if语句树:if(lat> = -33.0)if(lng< -151.5)... else ...依此类推。它只是一个班级。因此,如果您使用C#,移植它将是微不足道的。

http://www.edval.biz/mapping-lat-lng-s-to-timezones

准确到22公里。