2016-02-27 168 views
1

关于如何根据经纬度获得时区,有一个很好的answer。 然而,有我注意到作为如何从DateTime,Latitude和Longitude(无外部API)获取时区?

一件事的答案评论是缺乏任何UTC时间戳的要求确定的时间段时 。例如,伦敦一长/纬是 还不足以确定天气时区是GMT或BST(英国 夏令时/夏令时)。所以一定要确定你需要lat,long和UTC时间戳的正确的 时区。

此外,还有一个wiki,其中谈到那Java有它的时区自己的数据库,这是在甲骨文记载website

我想知道的是给予UTC DatetimeLatitudeLongitude,是有办法利用Java的时区数据库来获取时区而不是进行API调用?

任何资源/例子?

+0

我看不出如何。时区数据库包含有关所有时区的UTC偏移量和DST规则的规则。但是这个星球上的哪个点是由哪个时区不在数据库AFAIK中决定的,并且可以基于政治决策等而改变。 –

+0

因此获得这些信息的唯一方法是依赖外部Web服务,如提到的那些服务有问题的链接? – daydreamer

+0

不,我猜你可以找到(或创建)地理定位时区数据库并将其嵌入到应用程序中。但就像时区数据库一样,它必须定期更新才能保持正确。比如说,明天叙利亚或伊拉克分裂为三个不同的国家。你不能说出这三个新国家的政府会选择采用哪个时区。 –

回答

1

您引用的文章显示了几个脱机工作的库,其中包括一个用于Java的库。这些库根据tz_world地图查找纬度/经度,然后返回标准IANA时区标识符,例如America/New_York

然后,使用该标识符以及任何时间戳来使用Java库或标准Java进行转换。最好的方法是对Java 7及更早版本使用Joda-Time,并使用用于Java 8+的新的java.time包。

没有一步实施,因为这是两个不同的问题。在某些情况下,您可能需要两者,但并非总是如此。