我的时区配置看起来像这个
config.time_zone = 'Pacific Time (US & Canada)'
config.active_record.default_timezone = 'Pacific Time (US & Canada)'
当我查询对象的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个小时。我不明白为什么会发生这种情况。这是因为我的配置中有任何错误吗。
最终发现问题在中
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时区值中的数据保存到DB中,因此稍后当我们查询控制台时,它会再次调整时区,因此查询的时间将相差7小时。