【问题标题】:Get full time zone name given an instance of ActiveSupport::TimeWithZone获取给定 ActiveSupport::TimeWithZone 实例的完整时区名称
【发布时间】:2018-08-25 06:47:22
【问题描述】:

给定一个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")。

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

【问题讨论】:

  • @mudasobwa 谢谢,但是time.zone 的返回是标准字符串,所以没有name() 方法。

标签: ruby-on-rails ruby activesupport


【解决方案1】:

看起来缩写不是唯一的。因此,像“ACT”这样的一个缩写可以表示 2 个不同的时区,一个在南美洲,一个在澳大利亚 https://www.timeanddate.com/time/zones/。这可以解释为什么 ruby​​ 没有内置的方法来做你需要的事情。

也许你可以使用这个 gem https://github.com/davispuh/TimezoneParser

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-09-29
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多