如何将时区全名翻译成tz缩写?

yll*_*ate 26 ruby ruby-on-rails ruby-on-rails-3

在Rails 3.x应用程序中,我需要显示时区缩写(EST,PST,CST等)而不是全时区名称.我已经看到了一些似乎可以解决这个问题的讨论,但过于冗长的举止.

是否有一个宝石或一个非常简洁的方法来处理这个可用于正确映射它们?

ere*_*ite 33

对于当前时区:

Time.zone.now.strftime('%Z')
Run Code Online (Sandbox Code Playgroud)

或者是时区列表:

ActiveSupport::TimeZone.us_zones.map do |zone|
  Time.now.in_time_zone(zone).strftime('%Z')
end
Run Code Online (Sandbox Code Playgroud)

它有效,但似乎应该有一个更好的方法......


ifi*_*ime 7

Time.now.zone
# => "UTC"
Run Code Online (Sandbox Code Playgroud)

要使用默认时区(如果已设置),您可以使用:

Time.zone.now.zone
# => "CDT"
Run Code Online (Sandbox Code Playgroud)

更多信息:http://api.rubyonrails.org/classes/Time.html#method-c-zone-3D


rla*_*sch 7

我四处寻找这个答案,终于找到了我想要的东西。我将答案留在这里,这样其他人可能不必看上去就和我一样长。

如果您可以访问ActiveSupport并处理TimeZone对象,如下所示:

timezone = ActiveSupport::TimeZone.all[44]
Run Code Online (Sandbox Code Playgroud)

那么您可以通过以下方式获取缩写:

timezone.tzinfo.current_period.abbreviation
Run Code Online (Sandbox Code Playgroud)