从 rails 中的时区检索城市名称

Retrieve city name from TimeZone in rails

我已经按照描述设置了我的默认时区here

class Application < Rails::Application
 config.time_zone = "Asia/Kolkata"
end

现在我可以从 rails 控制台获取时区 IST 但我想获取该时区的标识符 (Asia/Kolkata) 而不是这个。

这是我得到的:

 > Time.zone.name # work for this
 => "Asia/Kolkata" 
 > Time.now.zone
 => "IST" 
 > Time.now.zone.name # this doesn't work
 => NoMethodError: undefined method `name' for "IST":String

现在我遇到麻烦了:

 > b
 => 2015-03-13 16:38:12 +0530
 > b.zone
 => "IST"
 > b.zone.name
NoMethodError: undefined method `name' for "IST":String

有什么方法可以从对象 b 中检索到 zone.name(这里是 Asia/Kolkata)。

注意: 我不想只针对这个 IST 时区。但是对于通用时区。这只是一个示例。有什么办法或 gem 可以解决我的问题吗?感谢您的帮助和指导。

更新

如果我在 application.rb 中定义 timezone 那么 PrakshMurthy 的答案是正确的。但我不想要特定的时区。所以我必须在application.rb中不指定的情况下实施。请帮助我。

这应该有效:b.in_time_zone.time_zone

这就是您要查找的内容(未在 application.rb 中指定 timezone

   > b
   => 2015-03-13 16:38:12 +0530
   > getutc = b.utc_offset
   => 19800
   > tz_names = ActiveSupport::TimeZone.zones_map.values.collect{|z| z.tzinfo.name if z.utc_offset == getutc}.compact!
   => ["Asia/Kolkata", "Asia/Kolkata", "Asia/Kolkata", "Asia/Kolkata", "Asia/Colombo"] 
   > tz_names.first
   => "Asia/Kolkata" 

现在您不必在 application.rb 中指定默认时区。 :)

b.time_zone.name

因为你的 b 类似于 Time.zone.nowb.time_zone.name 给出 Asia/Kolkatab.time_zone.name.to_s 也给出相同的结果。