Ruby on rails ActiveRecord默认时区无法从数据库读回

Ruby on rails ActiveRecord默认时区无法从数据库读回,ruby-on-rails,ruby,activerecord,timezone,rails-activerecord,Ruby On Rails,Ruby,Activerecord,Timezone,Rails Activerecord,我正试图让我的所有模型在同样配置为EST的DB2数据库中使用EST时区来编写时间戳 我已经用以下配置了我的应用程序.rb配置: config.time_zone = 'Eastern Time (US & Canada)' config.active_record.default_timezone = 'Eastern Time (US & Canada)' 创建新记录并保存到数据库时,时间戳看起来很好: => #<TZTestModel id: 3500, ad

我正试图让我的所有模型在同样配置为EST的DB2数据库中使用EST时区来编写时间戳

我已经用以下配置了我的
应用程序.rb
配置:

config.time_zone = 'Eastern Time (US & Canada)'
config.active_record.default_timezone = 'Eastern Time (US & Canada)' 
创建新记录并保存到数据库时,时间戳看起来很好:

=> #<TZTestModel id: 3500, added_ts: nil, ...>
irb(main):002:0> rec.added_ts = Time.zone.now
=> Fri, 06 Nov 2015 19:03:42 EST -05:00
irb(main):003:0> rec.added_ts
=> Fri, 06 Nov 2015 19:03:42 EST -05:00
irb(main):004:0> rec.save
SQL (91.0ms)  INSERT INTO TZTESTMODEL(id, added_ts, ...) VALUES (3500, '2015-11-06 19:06:55.237000', ...)
=> true
=>#
irb(主):002:0>rec.added\u ts=Time.zone.now
=>2015年11月6日星期五19:03:42东部时间-05:00
irb(主):003:0>记录已添加
=>2015年11月6日星期五19:03:42东部时间-05:00
irb(主):004:0>记录保存
SQL(91.0ms)插入TZTESTMODEL(id,添加的?)值(3500,'2015-11-06 19:06:55.237000',…)
=>正确
我查询数据库,可以看到插入了正确时间戳的记录。但是,当我试图通过ActiveRecord读回记录时,时间戳字段为nil:

irb(main):008:0> TZTestModel.first
=> #<TZTestModel id: 3500, added_ts: nil, ...>
irb(main):008:0>TZTestModel.first
=> #
只有在
application.rb
中设置默认时区时,才会发生这种情况。如果我不添加配置,那么AR默认为UTC,可以写入和读取时间戳字段,而不会出现任何问题


非常感谢您的建议

我终于找到了答案。问题是
config.active\u record.default\u timezone
在RoR下运行时只接受两个值/符号:
:utc
:local
。 我将该值设置为
:local
,它可以完美地拾取时区。
application.rb
中的完整配置现在是:

config.time_zone = 'Eastern Time (US & Canada)'
config.active_record.default_timezone = :local 
将时间戳添加到模型的对象时,模型仍以UTC格式存储值,但在写入数据库和读取(例如,在输出为字符串之前)之前,它会自动转换为EST

我还有一个应用程序是用Ruby编写的守护进程(不是RoR)。在这个守护进程中,我将AR默认时间戳直接设置为EST,而不是:local,并且我还将ENV['TZ']值设置为'EST',以确保在AR之外执行的任何日期/时间操作也使用正确的时区,如下所示:

ActiveRecord::Base.default_timezone = 'Eastern Time (US & Canada)'
ENV['TZ'] = 'EST'
这使得我的应用程序(RoR应用程序和Ruby守护进程)的两侧的时区一致