我对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; 它也将给出指定时区的时间;
所以这更像是一种黑客而不是解决方案。