给定ActiveSupport :: TimeWithZone的实例,获取完整的时区名称

时间:2018-08-25 06:47:22

标签: ruby-on-rails ruby activesupport

给出一个ActiveSupport::TimeWithZone的时间实例,如何为该时间实例返回完整的时区名称?

从ActiveSupport文档中:

Time.zone = 'Eastern Time (US & Canada)'   # => "Eastern Time (US & Canada)"
time = Time.zone.now
time.zone # => "EST"

因此,给定一个时间对象,我可以使用time.zone轻松获得时区缩写,但是我如何获得完整的时区名称?在文档的示例中,该字段为"Eastern Time (US & Canada)"(我也会对"America/New_York"感到满意)?

我意识到时区名称尚未标准化,因此,我很乐于找到一种将缩写转换为任何非缩写格式(例如"Eastern Time (US & Canada)""America/New_York"的方法) )。

似乎没有任何内置的时区缩写到时区的反向映射。至少,我还没有找到它。显然我可以创建自己的映射,但是很有可能这是一个已解决的问题。

2 个答案:

答案 0 :(得分:1)

看起来缩写不是唯一的。因此,一个类似“ ACT”的缩写表示两个不同的时区,一个在南美,一个在澳大利亚https://www.timeanddate.com/time/zones/。那可以解释为什么红宝石没有内置的方式来做您需要的事情。

也许您可以使用https://github.com/davispuh/TimezoneParser这个宝石

答案 1 :(得分:0)

问题似乎是我没有像我想的那样与ActiveSupport::TimeWithZone实例进行交互。

ActiveSupport::TimeWithZone应该具有一个返回我想要的属性的time_zone属性,但是标准的Time对象只是具有一个返回字符串时区缩写的zone()方法。 / p>