关于.net:从纬度和经度中获取Windows TimeZoneInfo

Get Windows TimeZoneInfo from Latitude and Longitude

在网络应用中,我让人们输入他们的地址,然后我使用Google的地理编码API来获取他们的经度和经度。接下来,我想使用这些坐标获取他们的Windows时区名称,以便我可以通过.Net TimeZoneInfo对象正确处理夏令时。

我使用了几个可用的时区Web服务来获取时区名称,例如:

  • http://www.askgeo.com/
  • http://www.geonames.org/
  • http://www.earthtools.org/

问题是这些都返回GMT的偏移量,或TZID(a.k.a。Olson)时区名称,而不是Windows时区名称。

此后续链接中有一个列表,它从Windows转换为TZID名称,但不是相反的方向,因为缺少许多TZID名称。例如,如果我从第一步获得的TZID是"Africa / Lusaka",那么该表将找不到等效的Windows时区名称。

  • Windows - > TZID:http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/zone_tzid.html
  • TZID - > Windows:???

所以我的问题是,是否有人知道可以通过lat / lon返回Windows时区名称的服务,或者是否有完整的列表或翻译服务可以在两种命名格式之间进行转换?

注意:我在这里已经审查了所有类似的问题,但没有一个完全解决了这个问题。


一种解决方法是获取Olson名称,然后使用Noda Time执行相关的时区计算,因为这是基于Olson名称。

我们还没有完全"完成"Noda Time,但是我们越来越接近1.0版本了 - 如果你愿意的话,你可以随时将自己限制在时区部分,并在.NET中完成剩下的工作。这将使您与我们仍在整理的任何区域隔离,例如格式化,解析以及为执行算法而公开的最佳API。不可否认,我希望API的其余部分能够吸引你并吸引你...或者你想对它发表评论并告诉我们你想如何使用它:)

我希望在接下来的几天内将DateTimeDateTimeOffset转换添加到代码库中 - 如果您可以根据需要ping邮件列表,我可以尝试为您提供服务。

抱歉这只是一种解决方法而不是完整修复。我将研究在Noda Time中提供更多Windows区域名称映射信息 - 它也使用CLDR,但是通过Olson数据库中的更多信息,我们可以轻松找到等价物。


刚刚在网上发现这可能是一个解决方案。将进一步调查:

http://www.timdavis.com.au/data/olson-time-zone-database-to-standard-windows-time-zone-v01/