Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何从过时的TZInfo标识符中获取Rails时区名称?_Ruby On Rails_Ruby_Timezone_Activesupport_Tzinfo - Fatal编程技术网

Ruby on rails 如何从过时的TZInfo标识符中获取Rails时区名称?

Ruby on rails 如何从过时的TZInfo标识符中获取Rails时区名称?,ruby-on-rails,ruby,timezone,activesupport,tzinfo,Ruby On Rails,Ruby,Timezone,Activesupport,Tzinfo,已经有一个问题可以回答如何将“美国/洛杉矶”转换为“太平洋时间(美国和加拿大)”。不过,我想将“美国/太平洋”和其他过时的时区转换为Rails时区。我在图书馆里找不到任何能帮助我完成这项任务的东西 在此命令中,将显示144个时区名称 ActiveSupport::TimeZone.zones\u映射 从轨道: 与活动支持捆绑在一起的TZInfo版本仅包含支持TimeZone类定义的区域所需的定义。如果需要使用时区未定义的区域,则需要安装TZInfo gem(如果本地安装了gem的最新版本,则将使

已经有一个问题可以回答如何将“美国/洛杉矶”转换为“太平洋时间(美国和加拿大)”。不过,我想将“美国/太平洋”和其他过时的时区转换为Rails时区。我在图书馆里找不到任何能帮助我完成这项任务的东西

在此命令中,将显示144个时区名称

ActiveSupport::TimeZone.zones\u映射

从轨道:

与活动支持捆绑在一起的TZInfo版本仅包含支持TimeZone类定义的区域所需的定义。如果需要使用时区未定义的区域,则需要安装TZInfo gem(如果本地安装了gem的最新版本,则将使用该版本而不是捆绑版本)

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

在TZDB数据中,“美国/太平洋”等标识符称为“链接”或“别名”。我可以看出,也许Rails中会忽略这些时区,但还有许多其他真实世界的时区完全丢失了

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

我能提供的最好的建议是忘记Rails时区,直接使用Ruby。它具有包含所有区域(包括别名)的完整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”时,它将被子类化为一个对象,因此您可以从那里使用
link\u to\u identifier
属性。

您可以这样做:

arr = TZInfo::Timezone.all_country_zone_identifiers.collect { |x| x + " " + ActiveSupport::TimeZone[x].formatted_offset }
arr.sort

它没有“US/Pacific”“
TZInfo::Timezone.get('US/Pacific')。链接到标识符
NoMethodError.@ajbraus-
America/Vancouver
是一个不同的区域,而不是链接。所以它不会有
link\u to\u identifier
属性。但遗憾的是,Rails的“有意义”区域列表中并没有这个区域。因此,除了使用TZInfo gem,不要尝试将它们映射回Rails区域之外,您在这里做的事情不多。@ajbraus-看到您更新了您的评论以显示
US/Pacific
-这确实是一个链接。@ajbraus-我对Ruby不太熟悉,但可能这不是检索属性的正确语法。请注意。