【问题标题】:Compute difference btw. times at different locations/timezones (accounting for daylight savings)顺便计算一下差异。不同地点/时区的时间(考虑夏令时)
【发布时间】:2011-07-25 20:46:45
【问题描述】:

我需要能够计算两个数据/时间值之间的差异,这些数据/时间值代表(可能)两个不同地理位置的瞬间。

我拥有的每个输入值都是以下的元组:

  • 没有时区偏移的日期/时间值,例如6:54 AM, 12/3/2005
  • 描述特定时间位置的纬度/经度值(例如,-33.8704, 151.1938)。

根据两个输入值的任意组合,我需要计算时间差(可能是分钟、天、年等)。首先,我需要:

  • 标准化每个输入值到其相关的 GMT(或祖鲁)时间。我想这可以通过将纬度/经度值转换为时区来完成。获得相关时区后,我需要根据指定日期考虑夏令时差异,以确定准确的时间。
  • 时间值标准化后,计算差异就很简单了。

谁能建议我怎么做:

  1. 将经纬度对转换为时区,以及
  2. 确定给定时区和日期的夏令时偏移量。

我想我需要一些函数用于 (1) 和一个值数据库用于 (2),但我不知道在哪里可以获得这些,或者是否它们是免费的。

其他限制:

  • 我想要使用 Java 或 .Net 编写的软件(因为我的软件应用程序可以使用任何一种编写的插件),并且
  • 我真的希望所有处理都是本地。我知道有几个 Web 服务可以计算纬度/经度对的时区(如 this Stackoverflow question 上所讨论的,例如 Geonames.org 或 DRTEngine),但考虑到我拥有的数据量,我不想要我拥有的每个数据点都依赖或使用第三方网络服务,因此我更喜欢“免费”软件并在本地访问所有正确的信息。

更新:感谢所有提供答案的人。我目前正在尝试通过使用GeoNames data 并执行最近邻计算来确定从纬度/经度的时区来解决这个问题,并将专注于使用 Joda Time 和相关的最新tz database 来计算夏令时偏移特定日期。

【问题讨论】:

  • 这是一个相当大的假设,即纬度/经度对应于特定时区 - 如果有人前往不同的国家/地区但将设备/计算机设置为本国时区怎么办?
  • @Damien_The_Unbeliever:我没有做任何假设。我在这里关注的数据是由在固定传感器上运行的软件生成的,这些传感器在本地时间记录观察结果。我只关心这些数据与其他数据的集成,这些数据具有来自其他来源的正确时区信息。

标签: java .net timezone geocoding


【解决方案1】:

一旦您有了一个时区,您就不需要自己执行 DST 检查 - Java TimeZone、Joda Time DateTimeZone 和 .NET TimeZoneInfo 类会为您处理这些。

(如果您使用的是 Java,我强烈建议使用 Joda Time 而不是内置的日历类。)

恐怕我不知道有任何库可以将纬度/经度转换为时区。我确信一定有一些可用的东西,但我不知道它是临时的。请注意,任何此类库都可能为您提供 zoneinfo 样式名称(例如“Europe/London”),这不是 .NET TimeZoneInfo 类使用的名称,很遗憾。如果Noda Time 准备好了,我建议使用它而不是.NET,但我们还没有完成:(

【讨论】:

  • 谢谢乔恩。查看 Joda 时间,我了解到tz database 的使用(和存在),这有助于我回答我的问题 (2) - 太棒了! :)
【解决方案2】:

只是一个愚蠢的问题...您确定您拥有的时间戳不是 GMT/Z/UTC 吗?如果这些数据来自单一来源,甚至是多个类似来源,这似乎更合乎逻辑。如果是这样,您的问题就消失了。

如果数据来自一组静态站点(即气象站),那么您可以使用建议的网络服务之一来查找时区,然后在本地缓存结果。诚然,夏令时可能会导致问题,因为时区会根据日期而变化。

【讨论】:

  • 日期是 UTC,但日历有一个时区。如果可以的话,全局使用 Date 会更简单。
  • 根本不是一个愚蠢的问题。不幸的是,在我处理的所有原始数据中,我确信某些子集是针对本地时间表示的(它们是由具有这种行为的某些软件生成的)。正是这些我希望将其合并到整个(清理过的)数据集中。我希望有一个软件解决方案,因为我有很多这样的数据,尽管如果情况变得更糟,我想我总是可以手动完成...... :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 2017-09-15
  • 1970-01-01
  • 2016-02-11
  • 2017-07-11
  • 2021-01-21
  • 2013-09-22
相关资源
最近更新 更多