Ruby TZInfo和ActiveSupport :: TimeZone,无法识别大多数时区缩写

问题描述 投票:0回答:1

在Ruby中,在有ActiveSupport和TZInfo的情况下,我试图解析可以包含时区标识符的任意时间字符串。

[当提供时区作为偏移量(例如'-08:00')时处理时区没有问题。两种长名称样式似乎都可以使用(例如'America/Vancouver''Pacific Time (US & Canada)'),但是常见的缩写和夏令时交替出现,但大多数都失败了,只有少数例外。

查看Wikipedia上的List of time zone abbreviations,有190个不同的缩写。当我用TZInfo::Timezone.get(abbrev)(其中abbrev是包含给定缩写字符串的变量,例如'MST')测试它们中的每一个时,只能识别9个:CET,EET,EST,GMT,HST,MET,MST ,UTC和WET。

例如:

> TZInfo::Timezone.get('MST')
 => #<TZInfo::DataTimezone: MST>
> TZInfo::Timezone.get('PST')
TZInfo::InvalidTimezoneIdentifier

所以:是否有一种方法可以将大多数或所有常见的3-5个字符的时区缩写转换为TZInfo或ActiveSupport时区?

或者我是否必须编写自己的转换帮助器,以使转换表在全球时区策略变化的情况下保持最新状态?

(我确实认识到缩写不是100%可靠或权威的-特别是在少数情况下,同一缩写指的是具有不同偏移量的多个时区-但我仍然需要做出“最佳猜测” ”,而不是没有。)

ruby activesupport tzinfo
1个回答
0
投票

tzinfo describes它使用的数据来自:

  • 包含时区定义文件的zoneinfo目录。这些文件是使用zic实用程序从IANA时区数据库生成的。大多数类似Unix的系统都包含一个zoneinfo目录。

  • TZInfo :: Data库(tzinfo-data gem)。 TZInfo :: Data包含一组Ruby模块,这些模块也是从IANA时区数据库生成的。

时区定义文件通常位于/usr/share/zoneinfo中。在我的计算机上,此目录中没有任何内容,例如,PMDT

tzinfo数据是here,也没有PMDT

如果找到一组合适的时区信息定义文件,其中包含要查询的区域,则tzinfo理论上应该可以使用它们。

© www.soinside.com 2019 - 2024. All rights reserved.