2008-11-04 25 views
49

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

当前流程将使用http://www.batchgeocode.com获取城市的经纬度(实际上称为雅虎服务),然后致电http://www.EarthTools.org以获取映射到偏移量的时区字母。问题在于yahoo服务有时会返回不正确的经度/纬度,而earthtools.org对于DST信息并不了解,因此映射到正确的TimeZone Id是一个繁琐的手动过程。

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

谢谢。

+0

你能解释Lat/Lon有什么问题吗? – wonderchook 2008-11-04 16:42:09

回答

36

有趣的问题!其他三个SO帖子(41504,55901237023)提到了一些线索。有Olson database(请参阅Wikipedia entry的说明),但它看起来更具算法性/编程性(例如,如果您知道县名,那么对于Indiana中的某些县有一个规则)。

我试着看EarthTools,但是它的failedSt.Pierre/Miquelon,这是一个很好的测试案例(对于邻近的纽芬兰来说是-3到30这是EarthTools说的)。

一些有希望的选择:worldtimeengine.com有一个免费的交互式版本和一个API似乎不贵(每英国英镑5000个查询),但API只涵盖拉特,长查询作为输入(不是位置作为输入,这是交互式版本有)。

最引:我想看看geonames.org看起来像它,你可以使用一个很好的丰富的API,他们有两个自由(慢)版本,一个商业版本有更好的表现。

p.s.这里有一些很好的测试例(从worldtimezone.comWikipedia's list of timezones,所述map of time zones也是说明性):

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

geonames.org提供所有已知城市及其奥尔森时区的数据转储(按国家)。传递最好的方式来做到这一点。 http://download.geonames.org/export/dump/ – 2012-04-10 18:07:24

+0

另请参阅[本社区维基条目](http://stackoverflow.com/q/16086962/634824) – 2013-04-18 16:25:01

+0

@skylarsutton借调。将geonames的数据加载到SQL表中并以任何方式将其切片,非常简单。 – 2014-06-24 16:36:04

0

我可以帮助您完成当前工作流程的第二部分。我已经编写了一个Java库,将纬度/经度与时区相关联,数据库在源代码中编码。

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

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

这是精确到22公里。

1

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

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

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

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

CountryName 
2LetterIsoCountryCode 
3LetterIsoCountryCode 
IANATimezones 
WindowsTimezones 

您可以下载生成JSON here

相关问题