Rails TimeZone中的混乱

时间:2015-04-08 10:53:33

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

我的时区配置看起来像这样

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

当我查询Object的created_at时,它返回一个像这样的值

2.1.5 :070 > b.created_at
 => Tue, 07 Apr 2015 20:49:58 PDT -07:00 

创建对象时的DateTime值就像这样

2.1.5 :071 > DateTime.now
 => Wed, 08 Apr 2015 03:49:58 -0700 

这意味着我为created_at字段获得的值比PDT晚7个小时。我无法理解为什么会发生这种情况。这是因为我的配置中有任何错误。

1 个答案:

答案 0 :(得分:0)

终于弄明白了,问题出在了

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

Postgresql以UTC格式保存日期,当我们在rails中查询它时,它会根据我们的配置调整时区。

config.time_zone = 'Pacific Time (US & Canada)'

以上行将时间转换为PDT。

config.active_record.default_timezone ='太平洋时间(美国和加拿大)'

此配置行强制应用程序将数据以PDT时区值保存到数据库,因此稍后当我们查询控制台时,它会再次调整时区,因此查询时间会有7小时的差异。