2014-01-09 5 views
4

필자가 사용중인 시스템의 현지 시간대를 나타내는 TZInfo 스타일 문자열 a-la 'America/New_York'를 얻어야합니다. 나는 그것을하는 방법을 알아낼 수 없다.로컬 시간대에 대한 TZInfo 스타일 문자열을 가져 오는 방법이 있습니까?

Time.zone 

#<ActiveSupport::TimeZone:0x007ff2e4f89240 @name="UTC", @utc_offset=nil, @tzinfo=#<TZInfo::TimezoneProxy: Etc/UTC>, @current_period=#<TZInfo::TimezonePeriod: nil,nil,#<TZInfo::TimezoneOffsetInfo: 0,0,UTC>>>> 

여기서 TimezoneProxy # Etc/UTC 필드는 원하는 스타일이지만 현지 시간이 아닙니다. 여기에 "EST"

Time.now.zone 

"EST" 

내가 원하고 내가 원하는 것을 얻을 TZInfo에 Time.now 또는 EST을 통과 할 수있는 방법이 표시되지 않는 것이 아니다?

"America/New_York"또는 현재 시간대를 기준으로하는 모든 해당 시간대 문자열 목록을 가져 오는 방법이 있습니까?

current_tz = ActiveSupport::TimeZone['EST'] 
ActiveSupport::TimeZone. 
    all. 
    select{|tz| tz.utc_offset == current_tz.utc_offset }. 
    map(&:tzinfo). 
    map(&:name). 
    uniq 

["America/Bogota", "EST", "America/New_York", "America/Indiana/Indianapolis", "America/Lima"] 

생산할 예정이다하지만이 때문에 일광 절약 문제의 잘못된 생각 :

+0

찾는 생산할 예정 파이썬이지만 시간대 정보가 오는 장소는 모두 동일합니다.) Unix, Win32에서 지역 시간대에 해당하는 zoneinfo 시간대 (예 : "America/New_York")를 찾습니다. – jfs

답변

0

당신은 모든 EST 별칭을 찾기 위해 시도 할 수 있습니다. 더 정확한 코드 :

current_tz = ActiveSupport::TimeZone['EST'] 
ActiveSupport::TimeZone. 
    all. 
    select{|tz| 
    tz.utc_offset == current_tz.utc_offset && 
     tz.tzinfo.current_period.dst? == current_tz.tzinfo.current_period.dst? 
    }. 
    map(&:tzinfo). 
    map(&:name). 
    uniq 

는 [tzlocal.get_localzone '()'(https://github.com/regebro/tzlocal) (이에 대한 원천

["America/Bogota", "EST", "America/Lima"] 
+0

또한'[ "America/Bogota", "EST", "America/New_York", "America/Indiana/Indianapolis", "America/Lima"] 및 ActiveSupport :: TimeZone.us_zones와 같은 미국 시간대 만 선택할 수 있습니다 .map (& : tzinfo) .map (& : name)' –