TimeZone по умолчанию с ActiveSupport (без Rails) - PullRequest
9 голосов
/ 20 июня 2010

Как установить TimeZone по умолчанию в ActiveSupport?

Вот что происходит:

irb -r 'rubygems'
ruby-1.8.7-p174 > require 'active_support' 
ruby-1.8.7-p174 > require 'active_support/time_with_zone'
ruby-1.8.7-p174 > Time.zone
ruby-1.8.7-p174 > nil

Как мне установить текущее местоположение по умолчанию?

Ответы [ 2 ]

7 голосов
/ 20 июня 2010

в rails устанавливается в environment.rb через инициализатор rails

Rails::Initializer.run do |config|
    config.time_zone = 'Pacific Time (US & Canada)'
    # ...

Я только что провел тест, и когда закомментировано config.time_zone Time.zone также вернет nil в проекте rails;так что я думаю, что «по умолчанию» нет, оно просто устанавливается в инициализаторах

Угадаете ли вы, что вы уже знаете, что это будет «работать»?.2 вещи могут отличаться от новых версий?

примечание редактора : В rails> = 3.0 все патчи обезьяны были перемещены в пространство имен core_ext, поэтому указанное выше требование не распространяетсяTime.Для более поздних версий ActiveSupport используйте следующее:

require 'active_support/core_ext/time/zones'
3 голосов
/ 03 сентября 2015

Вы можете установить часовой пояс со значениями из 2 источников, его собственного короткого списка ActiveSupport (~ 137 значений, см. ActiveSupport :: TimeZone.all для их получения) или из имен IANA (~ 590 значений).В последнем случае вы можете использовать tzinfo gem (зависимость от ActiveSupport), чтобы получить список или создать экземпляр TZInfo :: TimezoneProxy :

например

ActiveSupport::TimeZone.all.map &:name

Time.zone = ActiveSupport::TimeZone.all.first

Time.zone = ActiveSupport::TimeZone.all.first.name

Time.zone = ActiveSupport::TimeZone.new "Pacific Time (US & Canada)"

Time.zone = ActiveSupport::TimeZone.find_tzinfo "Asia/Tokyo"

Список всех стран, часовых поясов:

TZInfo::Country.all.sort_by { |c| c.name }.each do |c|
  puts c.name # E.g. Norway
  c.zones.each do |z|
    puts "\t#{z.friendly_identifier(true)} (#{z.identifier})" # E.g. Oslo (Europe/Oslo)
  end
end
...