加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何从过时的TZInfo标识符中获取Rails TimeZon

发布时间:2020-12-17 03:37:43 所属栏目:百科 来源:网络整理
导读:已经有一个问题可以解答如何将“America / Los_Angeles”转换为“Pacific Time(US Canada)”.但是我想将“US / Pacific”和其他过时的时区转换为Rails TimeZone.我无法在图书馆找到任何可以帮助我完成此任务的内容. 解决方法 从Rails ActiveSupport::TimeZon
已经有一个问题可以解答如何将“America / Los_Angeles”转换为“Pacific Time(US& Canada)”.但是我想将“US / Pacific”和其他过时的时区转换为Rails TimeZone.我无法在图书馆找到任何可以帮助我完成此任务的内容.

解决方法

从Rails ActiveSupport::TimeZone docs:

The version of TZInfo bundled with Active Support only includes the definitions necessary to support the zones defined by the TimeZone class. If you need to use zones that aren’t defined by TimeZone,you’ll need to install the TZInfo gem (if a recent version of the gem is installed locally,this will be used instead of the bundled version.)

就个人而言,我认为Rails时区很傻.它们被任意限制为Rails所描述的“146个区域的有意义的子集”.但他们没有解释他们如何确定哪些区域“有意义”哪些区域被丢弃.

诸如“US / Pacific”之类的标识符在TZDB数据中称为“链接”或“别名”.我可以看到,也许它们可能会从Rails中省略,但还有许多其他现实世界的时区完全缺失.

我在现实世界中唯一见过Rails时区标识符的地方是Twitter API.另一方面,IANA / TZDB标识符无处不在.

我能提供的最好建议是忘记Rails时区,直接使用Ruby TZInfo Gem.它具有包含所有区域的完整TZDB实现,包括别名.

如果您确实必须继续使用Rails区域,则可以先使用TZInfo解析实际区域的别名,然后查看该区域是否在Rails MAPPING字典中.例如:

"US/Pacific" => "America/Los_Angeles"                    (via TZInfo)

"America/Los_Angeles" => "Pacific Time (US & Canada)"    (via Rails MAPPING)

我相信当您通过TZInfo加载“US / Pacific”时,它将被子类化为LinkedTimezoneInfo对象,因此您可以使用link_to_identifier属性.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读