Rails 3.1 时区 UTC 和中部时区混淆



我对RoR相对较新,并且在时区转换方面遇到问题。 当从数据库(以美国中部时间存储)中获取数据时,它认为其中的时间是UTC并尝试转换它们,因此使它们错误了5小时。 我的应用程序.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"

任何帮助都会得到赞赏。

谢谢!

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

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

这一行最终以日志填充回退到:本地的警告结束

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

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

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

请参考 活动支持::时区::映射

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

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

最新更新