2010-06-20 5 views
9

ActiveSupport에서 기본 TimeZone은 어떻게 설정됩니까?ActiveSupport (레일이없는)가있는 기본 TimeZone

여기에 무슨 일이 일어나고있는 작업은 다음과 같습니다

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 

어떻게 설정하는 것을 기본적으로 현재의 위치에? 레일

답변

6

은이 레일 이니셜

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

난 그냥 테스트를했고, config.time_zone이 주석 때 Time.zone 또한 레일 프로젝트 전무를 반환 통해 environment.rb에 설정됩니다; 그래서 '초기화'에서 초기화되는 '기본'이 없다고 생각합니다.

이미 알고 계시 겠지만 추측 하시겠습니까?

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를 사용하고 있습니다. 최신 버전과 다를 수 있습니다. 레일에서> = 3.0의 모든 원숭이 패치가 core_ext 네임 스페이스로 이동되었습니다, 그래서 위의 Time를 확장하지 않습니다 필요합니다

편집자는이 있습니다.

require 'active_support/core_ext/time/zones' 
+1

은 내가 아는 : –

+1

레일의 외부를 사용하려고 해요; 내가 말하는 것은 레일에서도 기본을 사용하지 않는 것 같아요, 당신은 Time.zone을 irb로 설정해야 할 것 같습니다. 하지만 다시 내가 틀 렸습니다. – house9

+0

오! 멋지다. 테스트 해 줘서 고마워. –

2

당신은 (을 가져 ActiveSupport::TimeZone.all를 참조 ~ 137의 값) 자신의 ActiveSupport 짧은 목록이 소스의 값으로 시간대를 설정하거나 IANA names (~ 590 개 값에서 : 나중에 ActiveSupport 버전은 다음과 같은 사용). 이 마지막 사례에서는 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 
관련 문제