我已经设置了默认时区,如下所述
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
时区。但对于通用时区。这只是一个样本。有什么办法或宝石可以解决我的问题吗??我感谢你的帮助和指导。
更新
如果我在application.rb中定义timezone
,那么PrakshMurthy的asnwer是正确的。但我不想要特定的时区。所以我必须在application.rb中实现而不指定。请帮助我。
这就是您要查找的内容(没有在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.in_time_zone.time_zone
b.time_zone.name
因为你的b
有点像Time.zone.now
,而b.time_zone.name
给出了Asia/Kolkata
。CCD_ 15也给出了相同的结果。