【问题标题】:How to get tzinfo from ActiveSupport::TimeZones.zones_map?如何从 ActiveSupport::TimeZones.zones_map 获取 tzinfo?
【发布时间】:2014-10-21 18:00:27
【问题描述】:

我正在尝试检索所有时区 tzinfo 的数组,但我只需要每个时区的“America/Los_Angeles”部分,这样我就可以验证从 iOS 移动客户端接收到的时区。目前正在运行以下:

ActiveSupport::TimeZone.zones_map.values.collect { |z| z.tzinfo }

我得到了 TZInfo::TimezoneProxy 课程以及我需要的信息。

【问题讨论】:

    标签: ruby-on-rails ruby timezone validating


    【解决方案1】:

    试试下面的代码:

    ActiveSupport::TimeZone::MAPPING.values
    

    【讨论】:

    • 抱歉回复太晚了......但我最终选择了 time_zones = ActiveSupport::TimeZone.zones_map.values.collect { |z| z.tzinfo.identifier }.
    • 你的答案更干净
    【解决方案2】:

    ActiveSupport::Timezones 中的区域仅限于 146 个“有意义”区域的子集,尽管它们没有定义它们确定哪些区域是“有意义”的标准。

    如果您使用它来验证来自其他平台的 IANA 时区标识符,您肯定会遇到误报,因为其中有超过 500 个。

    相反,直接使用TZinfo Gem,而不是Rail 的奇怪变异版本。另请参阅the timezone tag wiki 中有关 Rails 时区标识符的部分。

    【讨论】:

    • 挪威首都奥斯陆不在“有意义的”名单中,但 Srednekolymsk (pop. 3525) 是。很奇怪。
    【解决方案3】:

    在文档中找到了实例方法“标识符”——http://www.rubydoc.info/gems/tzinfo/TZInfo/TimezoneProxy#_load-class_method

    所以我只需要

    ActiveSupport::TimeZone.zones_map.values.collect{|z| z.tzinfo.identifier }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-16
      • 1970-01-01
      • 1970-01-01
      • 2013-10-24
      • 2023-03-30
      • 2020-09-28
      • 2019-09-11
      • 2020-03-19
      相关资源
      最近更新 更多