我目前正在创建需要来自国家当前时间的应用程序 我有不同国家的经纬度。
我使用以下链接获取当前时间
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。
答案 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可能还不错 -