Вычислить разницу между прочим время в разных местах / часовых поясах (с учетом летнего времени) - PullRequest
1 голос
/ 30 марта 2011

Мне нужно иметь возможность вычислять различия между двумя значениями данных / времени, которые представляют моменты в (потенциально) двух разных географических точках.

Каждое входное значение, которое я имею, является кортежем следующего:

  • Значение даты / времени без смещения часового пояса, например, 6:54 AM, 12/3/2005.
  • Значение широты / долготы (например, -33.8704, 151.1938), описывающее местоположение определенного времени.

Из любой комбинации двух входных значений мне нужно вычислить разницу во времени (это могут быть минуты, дни, годы и т. Д.). Для начала мне нужно:

  • Нормализовать каждое из входных значений в соответствующее время по Гринвичу (или Зулу). Я полагаю, что это можно сделать путем преобразования значений широты / долготы в часовой пояс . После получения соответствующего часового пояса мне необходимо учесть разницу в летнем времени в соответствии с указанной датой , чтобы определить точное время.
  • После нормализации значений времени вычисление разницы становится тривиальным.

Может кто-нибудь подсказать, пожалуйста, как я могу:

  1. Преобразование пары lat / long в часовой пояс и
  2. Определяет смещение летнего времени для данного часового пояса и даты.

Я предполагаю, что мне нужна некоторая функция для (1) и база данных значений для (2) , но я не знаю, где я могу получить их, или если они свободно доступны.

Другие ограничения:

  • Я бы хотел программное обеспечение на Java или .Net (поскольку мое программное приложение может использовать плагины, написанные на любом из них) и
  • Мне бы очень хотелось, чтобы все обработки были локальными . Мне известно, что существует несколько веб-сервисов для вычисления часового пояса для пары широта / долгота (как обсуждалось в этом вопросе Stackoverflow , например, Geonames.org или DRTEngine), но с учетом объема данных, которые я Я не хочу полагаться на сторонние веб-сервисы или использовать их для каждой имеющейся у меня точки данных, поэтому я бы предпочел «бесплатное» программное обеспечение и локальный доступ ко всей необходимой информации.

ОБНОВЛЕНИЕ : Спасибо всем, кто предоставил ответы до сих пор. В настоящее время я пытаюсь решить эту проблему, используя данные GeoNames и выполняя расчет ближайшего соседа, чтобы определить часовой пояс по широте / долготе, и сосредоточусь на использовании Joda Time и связанной с ним последней база данных tz для вычисления смещения летнего времени для определенных дат.

Ответы [ 2 ]

2 голосов
/ 30 марта 2011

Получив часовой пояс, вам не нужно выполнять проверку DST самостоятельно - об этом позаботятся классы Java TimeZone, Joda Time DateTimeZone и .NET TimeZoneInfo.

(Если вы используете Java, я настоятельно рекомендую использовать Joda Time вместо встроенных классов календаря.)

Боюсь, я не знаю каких-либо библиотек для конвертирования lat / long в часовой пояс.Я уверен, что должно быть что-то доступное, но я не знаю это случайно.Обратите внимание, что любая такая библиотека может дать вам имя стиля zoneinfo (например, «Европа / Лондон»), которое, к сожалению, не , которое использует класс .NET TimeZoneInfo.Если бы Noda Time были готовы, я бы предложил использовать это вместо .NET, но мы еще не закончили: (

1 голос
/ 30 марта 2011

Просто тупой вопрос ... Вы уверены, что у вас есть временные метки, которые еще не в GMT / Z / UTC? Это кажется более логичным, если эти данные взяты из одного источника или даже из нескольких похожих источников. Если так, то твоя проблема просто исчезла.

Если данные взяты из коллекции статических сайтов (например, метеостанций), то вы можете использовать один из предложенных веб-сервисов для поиска часового пояса и локального кэширования результатов. По общему признанию, летнее время может вызвать проблемы с этим, поскольку часовой пояс изменился бы в зависимости от даты.

...