10

デフォルトの 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

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

4

2 に答える 2

8

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

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

テストを行ったところ、config.time_zoneがコメント化されると、Time.zoneもrailsプロジェクトで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>>

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

編集者注:rails> = 3.0では、すべてのモンキーパッチがcore_ext名前空間に移動されているため、上記のrequireは拡張されませんTime。それ以降ActiveSupportのバージョンでは、以下を使用します。

require 'active_support/core_ext/time/zones'
于 2010-06-20T03:42:08.840 に答える
5

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
于 2015-09-03T20:27:38.523 に答える