我按照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
有没有办法从对象zone.name
中检索Asia/Kolkata
(此处b
)。
注意:我不仅仅想要这个IST
时区。但对于普遍的时区。这只是一个样本。有什么方法或宝石可以解决我的问题吗?感谢您的帮助和指导。
如果我在application.rb中定义timezone
,那么PrakshMurthy的asnwer是正确的。但我不想要特定的时区。所以我必须在 application.rb 中指定而不指定。请帮帮我。
答案 0 :(得分:4)
这是您正在寻找的内容(未在 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 中指定默认时区。 :)
答案 1 :(得分:3)
这应该有效:b.in_time_zone.time_zone
答案 2 :(得分:0)
b.time_zone.name
由于您的b
类似于Time.zone.now
,而b.time_zone.name
给出了Asia/Kolkata
。 b.time_zone.name.to_s
也给出相同的结果。