从 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.now
而 b.time_zone.name
给出 Asia/Kolkata
。 b.time_zone.name.to_s
也给出相同的结果。
我已经按照描述设置了我的默认时区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.now
而 b.time_zone.name
给出 Asia/Kolkata
。 b.time_zone.name.to_s
也给出相同的结果。