使用GeoNames API从纬度和经度获取当前时间

时间:2012-12-17 12:35:50

标签: asp.net api c#-4.0 geonames

我目前正在创建需要来自国家当前时间的应用程序 我有不同国家的经纬度。

我使用以下链接获取当前时间

http://api.geonames.org/timezone?lat=21.7679&lng=78.8718&username=demo
(默认情况下,演示用户名仅用于测试,因为它有查询限制)

我获得了当前时间,但夏令时为ON时。那个API给了我正确的时间吗?如果没有那么我怎么能得到当前的时间。

在某些API中,我获得当前时间,如earthtool(未实现DST)。但我无法测试,因为目前没有实施DST,所以我在这种情况下如何测试?

我使用C#4.0在.NET中创建应用程序

如果有任何其他API,请告诉我,但首先要优先考虑GeoNames API。

1 个答案:

答案 0 :(得分:2)

如果没有反映当前的当地时间,我会非常感到惊讶。圣保罗(which is currently observing DST)的结果似乎同意:

<geonames>
  <timezone tzversion="tzdata2012f">
  <countryCode>BR</countryCode>
  <countryName>Brazil</countryName>
  <lat>-23.0</lat>
  <lng>-46.0</lng>
  <timezoneId>America/Sao_Paulo</timezoneId>
  <dstOffset>-3.0</dstOffset>
  <gmtOffset>-2.0</gmtOffset>
  <rawOffset>-3.0</rawOffset>
  <time>2012-12-17 10:48</time>
  <sunrise>2012-12-17 06:14</sunrise>
  <sunset>2012-12-17 19:47</sunset>
  </timezone>
</geonames>

但是,另一种方法是使用GeoNames API获取时区ID,然后使用Noda Time来处理与该时区有关的所有内容。 (免责声明:我是Noda Time的主要开发者。)

您不能直接使用BCL的TimeZoneInfo类,因为它不支持TZDB GeoNames提供的时区ID(例如“Asia / Kolkata”)。你可以只使用一个映射(CLDR提供一个),但根据我的经验,Windows时区信息有一些令人不安的怪异。

如果只是需要知道当前时间,GeoNames可能还不错 -