ruby-on-rails 转换Rails中的时区标识符

rryofs0p  于 2022-11-19  发布在  Ruby
关注(0)|答案(1)|浏览(180)

我需要将时区标识符转换为Rails ActiveSupport兼容的时区。我试图Assert一个时间位于给定的时区中。Ruby Time类将时区指定为Time.now.zone => 'PDT'DateTime.now.zone => '-07:00',但当我尝试将此标识符与TZInfo或ActiveSupport一起使用时,会得到Invalid Identifier: PDT错误。

ActiveSupport::TimeZone.find_tzinfo(Time.now.zone) => Invalid Identifier: PDT
TZInfo::Timezone.get('PDT') => Invalid Identifier: PDT

Ruby Time和DateTime区域标识符不能在它们自己和Rails助手之间轻松转换,这似乎很奇怪。我可以使用utc_offset方法,但这有点问题,因为我没有那种方式到命名区域的Map。

j91ykkif

j91ykkif1#

Ruby时间和日期时区标识符不能在它们自己和Rails助手之间轻松转换,这看起来非常奇怪
这并不奇怪,这是一种 * 预期 *(考虑到时区主题是多么的复杂,这并不是Ruby特有的)。
Rails是一个非常固执己见的框架,对于时区,它采取了完全不同的方式:虽然Ruby的时区实现遵循RFC 2822,但TZInfo基于tz databasetz database与用于不同目的的tz database截然不同。
一般来说,时区缩写有很多问题(比如PDT一)--它们模棱两可,最多代表一个偏移,而不是时区本身(比这些缩写有更多的问题--看看this detailed explanation)。
因此,我认为经验法则是,要么使用Ruby的最小化内置时区支持,要么使用Rails的扩展时区支持(TZInfo附带的),但不能两者都使用。
WRT您的特定任务(我不完全理解,诚实)-有单独的宝石(如TimezoneParser,但也许有一些“更生动”),可能会帮助您与此Map。

相关问题