【问题标题】:Rails Time.now.in_time_zone issue with -1200 zoneRails Time.now.in_time_zone 问题与 -1200 区域
【发布时间】:2026-01-15 01:05:02
【问题描述】:

我们允许用户在使用我们的应用程序时传递他们的时间偏移量。有些正在传递-1200,这引发了 Invalid TimeZone 的错误......它没有找到 UTC 偏移量,但在挖掘了一下,我觉得它应该找到它。根据*,-12 的偏移量是有效的:

美国本土外小岛屿 贝克岛 豪兰岛

Rail 的区域处理与此偏移量有何关系?

【问题讨论】:

  • statoids.com/tum.html 在这些岛屿中,目前只有约翰斯顿、中途岛和威克拥有永久居民。其他人每隔一段时间就会访问,主要是由军方访问。因此可能会缺席?
  • 一定很晦涩,不被支持……还是有点怪。据 TZ 报道,我们有相当多的人使用该应用程序。如果现在被识别,将破解使用 -1100。
  • 你这么说很有趣。我认为这个应该作为一个问题提出然后github.com/rails/rails/issues
  • 这个时区肯定会让人感到困惑:Time.now.in_time_zone('Etc/GMT-12') => Wed, 28 May 2014 07:04:09 GMT-12 +12:00(UTC 目前是 Tue, 27 May 2014 19:04:09 UTC +00:00

标签: ruby-on-rails ruby timezone activesupport


【解决方案1】:

更多探索:

https://github.com/rails/rails/issues/11390

如果您确实需要一个具有 UTC -12:00 偏移量的区域,您可以使用 Etc/GMT+12 区域,奇怪的是它移动到日期线的另一侧,但显示为 GMT+12 -12:00是一样的。

>> ActiveSupport::TimeZone::MAPPING['Baker Island'] = 'Etc/GMT+12'
"Etc/GMT+12"

>> Time.zone = 'Baker Island'
"Baker Island"

>> Time.current
Tue, 27 May 2014 18:28:48 GMT+12 -12:00

希望有帮助

【讨论】:

  • 好答案。但是,它没有移动到日期线的另一边。只是 Etc 区域中的区域在其名称中具有倒置的符号,以向后符合 POSIX 时区。请参阅this Wikipedia article 中“区域”下的第三段。