Подтвердить что ты не робот

Как перевести полные имена часовых поясов на аббревиатуры tz?

В приложении Rails 3.x мне нужно отображать сокращения времени (EST, PST, CST и т.д.), а не полное имя часового пояса. Я видел несколько дискуссий, которые, похоже, рассматривают проблему, но в чрезмерно подробных манерах.

Есть ли драгоценный камень или очень сжатый способ справиться с этим, который можно использовать для правильного отображения?

4b9b3361

Ответ 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-адреса пользователей, вы можете выполнить поиск по часовому поясу на основе этого местоположения. Этот вопрос действительно задавался раньше, но в отношении широты/долготы, а не названия заданного часового пояса.

Прочитайте это: Поиск по часовому поясу из долготы широты