0

我目前正在创建需要该国家/地区当前时间的应用程序。
我有不同国家的纬度和经度。

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

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

我得到了当前时间,但是当夏令时开启时。该 API 是否给了我正确的时间?如果不是那么我怎么能得到当前时间。

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

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

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

4

1 回答 1

2

如果这不能反映当前的当地时间,我会感到非常惊讶。圣保罗(目前正在观察夏令时)的结果似乎同意这一点:

<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(例如“亚洲/加尔各答”)。您可以只使用映射(CLDR提供了一个),但根据我的经验,Windows 时区信息有一些令人不安的奇怪之处。

如果您需要知道当前时间,GeoNames 可能很好 -

于 2012-12-17T12:44:31.883 回答