【问题标题】:Get the Current Time from Latitude and Longitude Using GeoNames API使用 GeoNames API 从纬度和经度获取当前时间
【发布时间】:2012-12-17 20:49:52
【问题描述】:

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

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

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。

【问题讨论】:

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


    【解决方案1】:

    如果这不反映当前的当地时间,我会非常感到惊讶。圣保罗 (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(例如“亚洲/加尔各答”)。您可以只使用映射(CLDR 提供了一个),但根据我的经验,Windows 时区信息有一些令人不安的奇怪之处。

    如果您只是需要知道当前时间,GeoNames 可能没问题 -

    【讨论】:

    • 感谢您的回答。在
    • 很好的答案,我发现 GeoNames 已经在其 API 中实现了 DST 感谢您的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多