我正在尝试编写一个世界时钟应用程序,返回给定时区的日出和日落信息。其思路是,用户要么指定GMT偏移量,要么显式地给出时区。然后,应用程序将使用找到的java.util.TimeZone(或者可能给出GMT偏移量)查找纬度和经度。我意识到时区通常不是一种非常准确的获取地理位置信息的方式,因为它们主要基于政治边界,但似乎存在这样的东西。我找到的大多数站点/api都会给出纬度和经度的时区,但我想做一个反向搜索(返回给定时区的纬度和经度)。提前感谢你的帮助。
让我来告诉你,如果你在我的祖国新西兰这样做,你可能会看到什么程度的错误,新西兰在一个时区(除了偏远的岛屿),但却横跨了很大的纬度范围:
Invercargill, New Zealand
Time zone: NZST
Sunrise today: 7:05 am
Auckland, New Zealand
Time zone: NZST
Sunrise today: 6:34 am
预计中国(整个国家是一个时区)、智利、阿根廷和其他国家也会出现类似的问题。
Geonames.org有一个可下载的城镇数据库,其中包含各种信息,包括时区和人口。您可以使用它来填充一个数据库,该数据库从时区映射到该时区中最大城市的位置。
请注意,GMT偏移量对于这个目的是非常无用的,但幸运的是,时区id的大陆/城市术语使用户可以非常容易地选择正确的。
时区是一个区域,因此您必须返回该区域的边界坐标(可能还需要添加一些方法来检查给定点是否在其中)。你必须从地理数据开始。请记住,许多国家都有夏令时,所以时区不是恒定的。
在阅读了每个人的回答之后,我想我可能会使用Google的Geocoding API,它返回给定物理地址的纬度/经度和时区。我只需要添加一个接口,让用户输入地址、城市或邮政编码,以便从api检索信息并计算日出/日落时间。这比尝试将所有这些信息本地存储在数据库中(这将是巨大的)要好。感谢所有回答的人。