Compute difference btw. times at different locations/timezones (accounting for daylight savings)
我需要能够计算两个数据/时间值之间的差异,这两个数据/时间值代表(可能)两个不同地理位置的时刻。
我拥有的每个输入值都是以下元组:
-
没有时区偏移的日期/时间值,例如
6:54 AM, 12/3/2005 。 -
描述特定时间位置的纬度/经度值(例如,
-33.8704, 151.1938 )。
从两个输入值的任意组合,我需要计算时间差(可能是分钟,天,年等)。首先,我需要:
- 将每个输入值标准化为相关的GMT(或Zulu)时间。我想这可以通过将lat / long值转换为时区来完成。获得相关时区后,我需要根据指定日期考虑夏令时差异,以确定准确时间。
- 一旦时间值被标准化,计算差异就是微不足道的。
任何人都可以建议我怎么做:
我想我需要(1)的一些函数和(2)的值数据库,但我不知道在哪里可以得到这些,或者它们是免费提供的。
其他限制:
- 我想要Java或.Net中的软件(因为我的软件应用程序可以使用其中编写的插件),以及
- 我真的希望所有处理都是本地的。我知道有几个Web服务来计算纬度/长度对的时区(正如这个Stackoverflow问题中讨论的那样,如Geonames.org或DRTEngine),但考虑到我拥有的数据量,我不想要为我的每个数据点依赖或点击第三方Web服务,所以我更喜欢"免费"软件并在本地访问所有正确的信息。
更新:感谢所有提供答案的人。我目前正试图通过使用GeoNames数据并执行最近邻居计算来确定lat / long的时区来解决这个问题,并将专注于使用Joda Time和相关的最新tz数据库来计算特定的夏令时偏移量。日期。
一旦你有了一个时区,你就不需要自己进行DST检查--Java
(如果您使用的是Java,我强烈建议您使用Joda Time而不是内置的日历类。)
我不知道有任何库将lat / long转换为时区,我担心。我确信必须有一些可用的东西,但我不知道它。请注意,任何此类库都可能会为您提供zoneinfo样式名称(例如"Europe / London"),这不是.NET
只是一个愚蠢的问题......你确定你的时间戳已经不是GMT / Z / UTC了。如果这些数据来自单一来源,甚至是多个类似的来源,这似乎更合乎逻辑。如果是这样,你的问题就会消失。
如果数据来自静态站点(即气象站)的集合,那么您可以使用建议的Web服务之一来查找时区,然后在本地缓存结果。不可否认,夏令时可能会导致问题,因为时区会根据日期而变化。