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

时间:2012-06-27 13:22:06

标签: ruby-on-rails ruby-on-rails-3 activerecord ruby-on-rails-3.1 timezone

我对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"

任何帮助都会被贬低。

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

这一行结束时,日志中充满了回落到本地

的警告

什么有效是完全切换系统时区

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

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

使用的名称

请参阅此

ActiveSupport :: TimeZone :: MAPPING

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

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