4

私が使用しているシステムのローカル タイムゾーンを表す TZInfo スタイル文字列 a-la 'America/New_York' を取得する必要があります。私はそれを行う方法を理解できません。

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 フィールドは私が望むスタイルですが、現地時間ではなく UTC です。

Time.now.zone

"EST"

ここで、「EST」は私が望むものではなく、Time.now または EST を TZInfo に渡して必要なものを取得する方法がわかりませんか?

「America/New_York」または現在のタイムゾーンに基づいたすべての同等のタイムゾーン文字列のリストを取得する方法はありますか?

4

1 に答える 1

0

以下を使用して、すべての EST エイリアスを見つけることができます。

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"]

しかし、夏時間の問題があるため、これは正しくないと思います。より正しいコード:

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

生産します

["America/Bogota", "EST", "America/Lima"] 
于 2014-09-11T06:44:03.043 に答える