gpt4 book ai didi

ruby-on-rails - 如何从过时的 TZInfo 标识符中获取 Rails TimeZone 名称?

转载 作者:数据小太阳 更新时间:2023-10-29 07:12:49 25 4
gpt4 key购买 nike

已经有一个问题回答了如何将“America/Los_Angeles”转换为“Pacific Time (US & Canada)”。但是我想将“美国/太平洋”和其他过时的时区转换为 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 个区域的有意义的子集”内。但是他们没有做任何事情来解释他们如何确定哪些区域是“有意义的”,哪些区域被丢弃。

“美国/太平洋”等标识符在 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 属性。

关于ruby-on-rails - 如何从过时的 TZInfo 标识符中获取 Rails TimeZone 名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19397663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com