Rails 时区混乱

Confusion in Rails TimeZone

我的时区配置如下所示

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

当我查询对象的 created_at 时,它 returns 我得到这样的值

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 字段获取的值晚了 7 小时PDT.I 不明白为什么会这样 happens.Is 因为我的配置有任何错误。

终于弄明白了,问题出在

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 = 'Pacific Time (US & Canada)'

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