我有一个由非rails应用程序写入并由rails应用程序读取的数据库。数据库中有一个日期时间字段,此字段中存储的数据存储在东部时间。在我的rails应用程序中,我知道我可以通过config.time_zone = 'Eastern Time (US & Canada)'
在我的environment.rb文件中设置应用程序的时区。但是,rails假定存储在数据库中的数据以UTC格式存储,并在将信息输入和输出数据库时从config.time_zone转换为UTC。
有没有办法告诉rails这个特定字段中的数据,甚至我所有的日期时间字段都是东部时间而不是UTC?
答案 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
,具体取决于数据的保存方式,只需阅读顶部的免责声明 - 这是一个黑客攻击!