使用大于时区的查询

时间:2015-12-01 10:06:49

标签: sql postgresql ruby-on-rails-4

我正在做一个简单的查询,我正在寻找比给定时区晚created_at的记录,例如:2015-11-30T11:16:15.039Z

通过

User.where(["created_at > ?", '2015-11-30T11:16:15.039Z'])

我被期望不会收到那段时间的记录,尽管它会返回。感觉好像我的查询是created >=

我想到的另一件事是created_at不是数据库中的时区,它以这种格式存储:

         created_at
----------------------------
 2014-06-25 04:51:35.689021

这可能是问题所在,但我现在还不确定如何解决它。

非常感谢任何建议。

谢谢

2 个答案:

答案 0 :(得分:0)

您可以按时区创建记录,如: -

User.where("created_at > ?", Time.zone.now.beginning_of_day)
or 
User.where("created_at > ?", Time.zone.utc_to_local(DateTime.parse("2015-11-30T11:16:15.039Z"))

答案 1 :(得分:0)

时区是一个不变的问题。

<强> TL; DR

User.where(['created_at > ?', Time.zone.parse('2015-11-30T11:16:15.039Z')])

在您的rails应用程序中,最理想的是在config/application.rb

中定义它运行的时区
module MyAwesomeApp
  class Application < Rails::Application
    ...
    config.time_zone = 'Central Time (US & Canada)'
    ...
  end
end

您可以通过运行以下rake命令找到有效时区列表: -

rake time:zones:all

现在,在执行查询时,您可以执行以下操作。

User.where(['created_at > ?', Time.zone.parse('2015-11-30T11:16:15.039Z')])

在这种情况下,我们采用给定的UTC ISO8601格式并通过Time#parser应用应用程序时区。

这应确保查询时间采用Active Record所需的格式,并且还包括与应用程序相关的全时区信息。