Ruby: преобразовать названия часовых поясов "США / Восточный" в "Центральное время (США и Канада)" - PullRequest
3 голосов
/ 02 ноября 2011

У меня есть старая база данных с форматами часовых поясов, такими как:

US/Eastern
Australia/Melbourne

В моем новом приложении Rails я сохраняю их как:

Eastern Time (US & Canada)
Melbourne

Как я могу преобразовать старое в новое? Я возился с ActiveSupport :: TimeZone, но не могу найти правильную комбинацию для перехода от одного к другому.

Я надеялся, что смогу создать новый объект, а затем вернуть вновь отформатированное имя, но оно просто возвращает имя, которое я ему дал. Пример:

> tz = ActiveSupport::TimeZone.new("US/Eastern")
=> (GMT-05:00) US/Eastern
> tz.name
=> "US/Eastern"

Заранее спасибо!

1 Ответ

4 голосов
/ 02 ноября 2011

Это довольно уродливо, но я нашел единственный способ сделать это:

city = TZInfo::Timezone.get('US/Eastern').instance_eval('@linked_timezone').name
ActiveSupport::TimeZone::MAPPING.invert[city]

Редактировать:

Чтобы этот код работал сВы можете сделать это в любом городе или зоне:

zone = TZInfo::Timezone.get(zone_name)
city = (zone.instance_eval('@linked_timezone') || zone).name
ActiveSupport::TimeZone::MAPPING.invert[city]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...