【问题标题】:Nonexistent timezone in Ruby on RailsRuby on Rails 中不存在的时区
【发布时间】:2017-03-13 11:24:36
【问题描述】:

在巴巴多斯开发 Ruby on Rails 应用程序时,我偶然发现了时区问题。

The timezone in Barbados, officially, is AST (Atlantic Standard Time),即 UTC-4。在 config.time 中将时区设置为 AST 的字符串是“大西洋时间(加拿大)”。

但是,AST 中的一些国家/地区昨天进入了夏令时,但巴巴多斯没有,这使得存储在数据库中的记录在 UTC-3 中显示为“ADT”(大西洋白天时间)而不是 AST。是否还有其他不正常显示的时区?

【问题讨论】:

  • 您好,能否请您提供问题的代码和其他详细信息。谢谢

标签: ruby-on-rails ruby datetime timezone


【解决方案1】:

简答:你可以改用America/Barbados 的时区吗?


更长的答案

ActiveSupport::TimeZoneTZInfo::Timezone 的封装,因此您可能需要深入研究the source 以了解发生了什么。

在这里找出时区有点令人困惑 - 巴巴多斯的时区似乎被列为 Eastern Caribbean on wikipedia,但它重定向到 AST,并注明未观察到 DST。但是在 Rails 中将其设置为 AST 会默认遵守 DST。

但如果您查看TZInfo 中的supported timezones,您可以看到巴巴多斯和other countries 确实有共享东加勒比时间的时区。

这应该可行...如果不是,那么值得在 TZInfo 错误跟踪器上提出。

【讨论】:

  • +1 America/Barbados 将与原始 TZInfo gem 一起使用。一般来说,Rails 时区 ID 很臭,应该避免使用,但如果必须选择另一个半等效的 Rails 时区 "La Paz" 会起作用。
猜你喜欢
  • 2012-11-07
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多