Я полагаю, что вам нужна пользовательская логика и / или собственная база данных часовых поясов, чтобы получить ее в точности так.
Использование %Z
с strftime
даст вам то, что когда-либо нравится вашей ОС, и тамнесколько оговорок в документах ruby .
Одна идея, из которой вы можете получить некоторый пробег: если вы начинаете с идентификатора часового пояса, такого как "America / Los_Angeles", то вы можете использовать ActiveSupport :: TimeZone :: MAPPING, чтобы получить более дружелюбное имя, илипо крайней мере, имя часового пояса Rails.
например:
ActiveSupport::TimeZone::MAPPING.key("America/Los_Angeles")
=> "Pacific Time (US & Canada)"
Но это не сработает для каждого идентификатора:
ActiveSupport::TimeZone::MAPPING.key("America/Detroit")
=> nil
Вы можете увидеть, какие из них будуткарта вот так:
TZInfo::Country.get('US').zone_identifiers.map {|ident| [ident, ActiveSupport::TimeZone::MAPPING.key(ident)] }
Так что в этом случае вам нужно обратиться к имеющемуся у вас идентификатору, или, возможно, этот подход может сработать.
Тогда вы 'Мне нужно разобраться с частью перехода на летнее время, здесь вы можете использовать dst?
ActiveSupport::TimeZone["America/Los_Angeles"].parse("2013-04-03 17:47:00").dst?
Тогда вам нужно соединить все это вместе!... и добавить смещение.