Рельсы часовой пояс со смещением и дст - PullRequest
1 голос
/ 24 октября 2011

Мне нужна помощь в хранении правильного часового пояса в Rails, исходя из данных, предоставляющих мне смещение UTC, и летнего времени.

Данные получены из http://openflights.org/data.html

Часовой пояс Смещение часов от UTC.Дробные часы выражаются в десятичных числах, например.В Индии 5,5.

DST Летнее время.Один из E (Европа), A (США / Канада), S (Южная Америка), O (Австралия), Z (Новая Зеландия), N (Нет) или U (Неизвестно).

Мне интереснокак я могу использовать эти данные в Rails для хранения часового пояса этих аэропортов в виде строки в столбце часового пояса, который Rails распознает.

Ответы [ 2 ]

0 голосов
/ 30 марта 2018

Мне понадобилась та же функциональность в немного более простом случае базы данных почтовых индексов США, которая включает смещение часов UTC и поле Y / N, указывающее, участвует ли оно в переходе на летнее время, поэтому все почтовые индексы западного побережья США в этой базе данных имеют "-8 "и" Y ".

Я не смог найти встроенный метод Rails, чтобы сделать это, поэтому я вручную создал поисковый хеш, ключом которого являются спаренные поля UTC и DST, например, "# {utc} # {dst}"и значение является именем часового пояса.Этот метод может работать и для смещений utc, таких как «5.5».

В методе, который выполняет поиск, задаются значения utc и dst, я указываю часовой пояс по умолчанию (например, западное побережье США) вслучай, когда поиск по хешу возвращает ноль, потому что неожиданное значение, такое как -5N (так как у восточного побережья нет никаких состояний без DST, которые никогда не должны возникать).

Но тот же самый метод мог бы быть применен глобальнопутем создания хэша, представляющего весь возможный часовой пояс со значениями Y и N для перехода на летнее время.

class MyZip

HOUR_DST_TO_TIMEZONE_NAME = {
  "-5Y" => "Eastern Time (US & Canada)",
  "-6Y" => "Central Time (US & Canada)",
  "-7Y" => "Mountain Time (US & Canada)",
  "-7N" => "Arizona",
  "-8Y" => "Pacific Time (US & Canada)",
  "-9Y" => "Alaska",
  "-10N" => "Hawaii"
  }

def self.timezone_name_from_zip_hour_dst(utc, dst)
  key = "#{utc}#{dst}" 
  return HOUR_DST_TO_TIMEZONE_NAME[key] || MyZip.unknown_timezone_name
end
...
0 голосов
/ 28 октября 2011

Я не думаю, что есть решение для этого, если вы не создадите пользовательское отображение DST и смещение к определенному часовому поясу.

В итоге я воспользовался веб-сервисом geonames.org, чтобы узнать часовой пояс по широте / долготе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...