Как перевести полные имена часовых поясов на аббревиатуры tz?
В приложении Rails 3.x мне нужно отображать сокращения времени (EST, PST, CST и т.д.), а не полное имя часового пояса. Я видел несколько дискуссий, которые, похоже, рассматривают проблему, но в чрезмерно подробных манерах.
Есть ли драгоценный камень или очень сжатый способ справиться с этим, который можно использовать для правильного отображения?
Ответы
Ответ 1
Для текущего часового пояса:
Time.zone.now.strftime('%Z')
Или для списка часовых поясов:
ActiveSupport::TimeZone.us_zones.map do |zone|
Time.now.in_time_zone(zone).strftime('%Z')
end
Это работает, но по-прежнему кажется, что должен быть лучший способ...
Ответ 2
Time.now.zone
# => "UTC"
Чтобы использовать часовой пояс по умолчанию (если установлен), вы можете использовать:
Time.zone.now.zone
# => "CDT"
Подробнее об этом: http://api.rubyonrails.org/classes/Time.html#method-c-zone-3D
Ответ 3
Я просмотрел весь этот ответ, и наконец нашел то, что искал. Я уезжаю ответ здесь, чтобы другие не могли бы выглядеть почти так же долго и упорно, как я должен был.
Если у вас есть доступ к ActiveSupport и работа с объектами TimeZone, например:
timezone = ActiveSupport::TimeZone.all[44]
вы можете перейти к аббревиатуре следующим образом:
timezone.tzinfo.current_period.abbreviation
Ответ 4
Хорошо, если вы позволяете своим пользователям выбирать свой собственный часовой пояс, вы можете отобразить сокращенную область часового пояса как часть формата даты и времени. Попробуйте что-то подобное в вашем appliction_helper.rb, а затем используйте его в представлении для форматирования объекта datetime:
def format_datetime(datetime)
datetime.strftime "%-d %b %Y, %H:%M %Z"
end
Обновление
Если вы выполняете геолокацию на основе IP-адреса пользователей, вы можете выполнить поиск по часовому поясу на основе этого местоположения. Этот вопрос действительно задавался раньше, но в отношении широты/долготы, а не названия заданного часового пояса.
Прочитайте это: Поиск по часовому поясу из долготы широты