I need a mapping list of cities to timezones- best way to get it?
我有一份城市,州/省和国家列表,我需要轻松找到各自的时区。具体来说,我需要知道他们映射到哪个Windows TimeZone。到目前为止,这是一个艰难的过程,因为没有简单的方法可以将城市传递给某个东西并获得时区(时区是一个偏移量,时区是否支持夏令时)。
目前的流程是使用http://www.batchgeocode.com获取城市的纬度/经度(实际上称为雅虎服务),然后拨打http://www.EarthTools.org获取时区字母,映射到偏移量。问题是雅虎服务有时会返回不良的经度/纬度,而earthtools.org对DST信息知之甚少,因此映射到正确的TimeZone Id是一个繁琐的手动过程。
我不能成为第一个做到这一点的人 - 有没有人知道更好的方法,或者有哪些列表有我需要的信息?
谢谢。
有趣的问题!这三个SO帖子(41504,55901和237023)提到了几个潜在客户。有Olson数据库(参见维基百科条目的描述),但它看起来更算法/程序化(例如,如果你知道一个县名,那么对于印第安纳州的某些县有规则)。
我试着看看EarthTools,但它没有成为St.Pierre / Miquelon,这是一个很好的测试案例(-3:00而不是附近纽芬兰的-3:30,这是EarthTools所说的)。
一些有前途的选择:worldtimeengine.com有一个免费的交互式版本和一个看起来很便宜的API(每英镑5000个查询),但API只包括lat,long查询作为输入(不是作为输入的位置,这是交互式的东西)版本有)。
最佳领先:我看看geonames.org,看起来它有一个很好的丰富的API,你可以使用,他们有一个免费(慢)版本和商业版本,以获得更好的性能。
附:这里有一些很好的测试用例(来自worldtimezone.com和维基百科的时区列表,时区地图也是说明性的):
- 加拉加斯,委内瑞拉(-4:30)
- 甘德,纽芬兰(-3:30)
- 伊朗德黑兰(+3:30)
- 阿富汗喀布尔(+4:30)
- 尼泊尔加德满都(+5:45)
- 仰光,缅甸(+6:30)
- 查塔姆群岛,新西兰(+12:45)
- 复活节岛(-6)
- 圣皮埃尔和密克隆(-3)
- 斯坦利,福克兰群岛(-4)
- 印第安纳州埃文斯维尔(-6 =中部)
- 安大略省,俄勒冈州(-7 =山)
moment-timezone是一个用于时区计算的JavaScript库。
他们所有的时区数据链接国家,时区和抵消都是以json格式提供的。
我们使用.NET C#MVC,我们需要每个国家/地区的Windows时区列表。
因此,对于每个注册用户,我们可以自动设置时区。
大多数在线数据库都提供IANA时区,并且很难映射到特定国家/地区。
使用NodaTime,我们设法创建了一个列出以下条目的Json。
1 2 3 4 5 | CountryName 2LetterIsoCountryCode 3LetterIsoCountryCode IANATimezones WindowsTimezones |
您可以在此处下载生成的JSON。
我可以帮助您完成当前工作流程的第二部分。我编写了一个将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公里。