1

我对 RoR 比较陌生,并且在时区转换方面遇到了麻烦。当从数据库中获取数据(存储在美国中部时间)时,它认为那里的时间是 UTC 并尝试转换它们,因此使它们错了 5 个小时。我的 application.rb 文件中有这个:

config.time_zone = 'Central Time (US & Canada)'
config.active_record.default_timezone = 'Central Time (US & Canada)'

如果我删除这些配置指令之一,时间将无法正确保存。只要我有它们,时间就会正确存储在数据库中,但 RoR 无法正确读取它们。为了解决这个问题,我必须将从数据库获得的所有时间转换为 UTC。我必须相信有更好的方法。

我也尝试设置 ENV['TZ'],但这似乎没有任何作用。

ENV['TZ'] = "US/Central"

任何帮助将不胜感激。

谢谢!

4

1 回答 1

0

实际上,对我来说,AR 拒绝将值设置为来自 :utc/:local 的其他值

config.active_record.default_timezone = 'Central Time (US & Canada)'

这一行最后的日志充满了回退到 :local 的警告

有效的是完全切换系统时区

ENV['TZ'] = "US/Central"

确保使用正确的 tz 名称。Unix 时区名称不是 ActiveSupport::TimeZone 使用的名称

请参阅ActiveSupport ::TimeZone::MAPPING

另外,请注意,在此之后 Time.now == Time.current; 它也会在指定的时区给出时间;

所以这更像是一种黑客攻击而不是一种解决方案。

于 2013-05-24T09:42:56.497 回答