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小时的差异。
我的时区配置如下所示
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小时的差异。