我在中央时区(ENV['TZ'] = America/Chicago
),但我所有的MongoDB条目都以UTC格式存储。因此,如果我想查询所有昨天的条目,我必须过度补偿时区:
tz = 5.hours
d1 = Date.yesterday.at_midnight + tz
d2 = d1 + 1.day
Entry.where(:created_at.gte => d1, :created_at.lt => d2)
我很确定这是一个重大的黑客,但我不确定如何正确解决这个问题?它应该在数据库端还是在代码中。是否有一些阅读资源可以教会如何正确地做到这一点?
答案 0 :(得分:1)
假设您的Rails应用程序配置为使用UTC(请参阅config.time_zone
中的config/application.rb
),那么您应该可以使用Time.zone...
来构建日期。
我在太平洋时间,我的应用程序是UTC:
> Time.now
=> 2013-09-10 15:14:46 -0700
> Time.zone.now
=> Tue, 10 Sep 2013 22:14:48 UTC +00:00
我不知道Mongoid,但ActiveRecord会为你做这件事:
> Course.where(['created_at < ?', Time.now]).to_sql
=> "SELECT \"courses\".* FROM \"courses\" WHERE (created_at < '2013-09-10 22:16:27.106841')"
> Course.where(['created_at < ?', Time.zone.now]).to_sql
=> "SELECT \"courses\".* FROM \"courses\" WHERE (created_at < '2013-09-10 22:17:03.236353')"