我需要一个城市地图的时区 – 最好的方式来获得它?

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

目前的stream程是使用http://www.batchgeocode.com获取城市的经纬度(这真的叫雅虎服务),然后打电话给http://www.EarthTools.org获得一个时区信,它映射到一个偏移量。 问题是,雅虎服务有时会返回一个不好的经度/纬度,earthtools.org不知道很多有关DST信息,所以映射到正确的时区ID是一个繁琐的手动过程。

我不能成为第一个完成这个任务的人 – 是否有人知道更好的方法,还是列出那里有我需要的信息?

谢谢。

有趣的问题! 其他三个SO职位( 41504,55901和237023 )提到了一些线索。 有Olson数据库 (见维基百科条目的描述),但它看起来更加algorithm化/程序化(例如,如果你知道县名,那么对于印第安纳州的某些县来说,这是一个规则)。

我尝试着看EarthTools,但是对于St.Pierre / Miquelon来说 ,这是一个很好的testing案例(-3.00,而对于附近的纽芬兰来说,就是EarthTools所说的-3:30)。

一些有前途的选项: worldtimeengine.com有一个免费的交互式版本和API似乎是廉价的(每英国英镑5000查询),但API只涵盖拉特,长查询作为input(而不是位置作为input,这是交互版本有)。

最好的领导:我会看geonames.org看起来它有一个很好的丰富的API,你可以使用,他们有一个免费(慢)版本和商业版本更好的性能。

ps这里有一些很好的testing用例(来自worldtimezone.com和维基百科的时区列表,时区 地图也是说明性的):

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

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

所有他们的时区数据链接国家,timezomes和偏移量都是可用的JSON格式 。

我们使用.NET C#MVC ,我们需要每个国家的Windows时区列表。

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

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

使用NodaTime,我们设法创build了一个Json,其中列出了以下条目。

CountryName 2LetterIsoCountryCode 3LetterIsoCountryCode IANATimezones WindowsTimezones 

你可以在这里下载生成的JSON 。

我可以帮助你当前的工作stream程的第二部分。 我写了一个Java库,它将纬度/经度映射到时区,数据库在源代码中编码。

源代码基本上是一个巨大的if语句树:if(lat> = -33.0)if(lng <-151.5)… else …等等。 这只是一个class级。 所以,如果你使用C#,那么移植它将是微不足道的。

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

准确到22公里。