Rails / Activerecord数据库字段时区

时间:2010-07-14 14:41:36

标签: ruby-on-rails activerecord timezone

我有一个由非rails应用程序写入并由rails应用程序读取的数据库。数据库中有一个日期时间字段,此字段中存储的数据存储在东部时间。在我的rails应用程序中,我知道我可以通过config.time_zone = 'Eastern Time (US & Canada)'在我的environment.rb文件中设置应用程序的时区。但是,rails假定存储在数据库中的数据以UTC格式存储,并在将信息输入和输出数据库时从config.time_zone转换为UTC。

有没有办法告诉rails这个特定字段中的数据,甚至我所有的日期时间字段都是东部时间而不是UTC?

3 个答案:

答案 0 :(得分:8)

在application.rb中的On Rails 3.0.5上,这可以工作:

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

答案 1 :(得分:1)

config.active_record.default_timezone - 告诉ActiveRecord将数据库时间解释为处于指定时区,并使用此时区来处理created_at& updated_at属性。

答案 2 :(得分:0)

我的第一个建议是修复其他应用程序。另一个应用程序应该存储带有日期的UTC偏移量。如果您尝试解决问题,那么您只是想创造更多。例如,当夏令时发生时会发生什么,然后偏移会发生变化?

这样说并且别无选择 - 我会按照这些方式做一些事情,对于一个字段created_at

def created_at_in_eastern
  DateTime.parse(self.created_at.strftime("%D  %T EST")) if self.created_at
end

或者您可以使用EDT,具体取决于数据的保存方式,只需阅读顶部的免责声明 - 这是一个黑客攻击!