【问题标题】:Confusion in Rails TimeZoneRails 时区的混乱
【发布时间】:2015-04-08 10:53:33
【问题描述】:

我的时区配置如下所示

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 小时。我不明白为什么会发生这种情况。这是因为我的配置中有任何错误吗?

【问题讨论】:

  • AR 会自动将日期时间值转换为相应的时区,具体取决于您的应用配置。
  • 日期时间以 UTC 存储在数据库中,即“通用时间”,与格林威治标准时间相同(就我们的目的而言),即“+0 时间”。当它们显示时,它们会转换为您当地的时区。

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


【解决方案1】:

终于弄明白了,问题出在

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 小时的差异。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多