Techioz Blog

ActiveSupport を使用したデフォルトのタイムゾーン (Rails なし)

概要

デフォルトのタイムゾーンは 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

それをデフォルトで現在の場所に設定するにはどうすればよいですか?

解決策

Railsでは、rails初期化子を介してenvironment.rbに設定されます

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

テストを行ったところ、config.time_zone がコメントアウトされている場合、Rails プロジェクトでは Time.zone も nil を返します。したがって、「デフォルト」はなく、初期化子に設定されるだけだと思います

これが「うまくいく」ことはすでにわかっていると思いますか?

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
ruby-1.8.7-p174 > Time.zone = 'Pacific Time (US & Canada)'
ruby-1.8.7-p174 > Time.zone
=> #<ActiveSupport::TimeZone:0x1215a10 @utc_offset=-28800, @current_period=nil, @name="Pacific Time (US & Canada)", @tzinfo=#<TZInfo::DataTimezone: America/Los_Angeles>>

注: 上記のコードは Rails 2.2.2 を使用していますが、新しいバージョンでは異なる可能性があります。

編集者注: Rails >= 3.0 では、すべてのモンキー パッチが core_ext 名前空間に移動されているため、上記の要求は Time を延長しません。新しい ActiveSupport バージョンの場合は、以下を使用します。

require 'active_support/core_ext/time/zones'