我正在Rails 2.1+中实现Timezone支持,并且我遇到了从数据库中提取数据的明显错误。让我尝试设置它。
“deals”模型包含“offer_date”日期时间字段。假设我有两条带有这些offer_dates的记录:
Deal 1: 2009-12-29 23:59:59 -0500
Deal 2: 2009-12-28 23:59:59 -0500
这是正确的:日期应标记其给定日期的最后一秒。
现在,到了今天找到交易的时候,我有以下AR查询:
@deal = Deal.first(:conditions=>['offer_date > ?', Time.now.beginning_of_day], :order=>"offer_date ASC")
在这种情况下,虽然它是今天的第29位,但它表面上是第28位。为什么?这是控制台中发生的事情:
>> @deal = Deal.first(:conditions=>['offer_date > ?', Time.now.beginning_of_day], :order=>"offer_date ASC")
=> #<Deal id: 2, <blah blah blah...>, offer_date: "2009-12-29 04:59:00">
它将时间向前移动了5个小时,将昨天的时间转移到下一个时间。但是当我这样做时:
>> @deal.offer_date
=> Mon, 28 Dec 2009 23:59:00 EST -05:00
我得到了合适的时间。有没有搞错???我只想说,我需要那个日期才能正常工作,但我无法弄清楚我的问题在哪里。非常感谢您提供的任何帮助!
答案 0 :(得分:1)
有关AR日期查询,请参阅我的prior rsponse时间与时间。区域。
答案 1 :(得分:0)
答案 2 :(得分:0)
Time.zone.now # or any other TimeWithZone object
在你的finders / named_scopes / find中。或者您可以通读http://marklunds.com/articles/one/402然后再点击
module ActiveRecord
module ConnectionAdapters # :nodoc:
module Quoting
# Convert dates and times to UTC so that the following two will be equivalent:
# Event.all(:conditions => ["start_time > ?", Time.zone.now])
# Event.all(:conditions => ["start_time > ?", Time.now])
def quoted_date(value)
value.respond_to?(:utc) ? value.utc.to_s(:db) : value.to_s(:db)
end
end
end
end
进入您的environment.rb或初始化程序。