当我创建一个sql Time列时,我得到了一个纯时间,即.未注明日期的.但是当我使用Ruby Time类时,我也会得到一个日期.问题是何时“查找”生成的sql包含日期,而我似乎得到了奇怪的结果.
桌子
start_date: time
end_time: time
day_of_week: string
活动记录
def self.now_playing
self.find(:first,:conditions => ['day_of_week = ? AND end_time > ? AND start_time < ?',Time.now.strftime('%A'),Time.now,Time.now])
end
SELECT * FROM `schedules` WHERE (day_of_week = 'Saturday' AND end_time > '2009-06-20 10:19:59' AND start_time < '2009-06-20 10:19:59') LIMIT 1
生成的sql包含一个日期,这可能就是为什么我得到奇怪结果的原因,例如在给定时间有时间表时没有记录返回的原因吗?但是,如果该列是纯时间列,MysqL应该不忽略日期部分吗?
最佳答案
Ruby中的时间更像是时间戳记……总是有一个日期. ActiveSupport对此具有内置的转换,因此,如果日期不正确,您可以使用#to_s(:format)获得所需的结果.默认情况下,有一个:time选项,但它仅返回小时/分钟(%H:%M),如果还需要几秒钟,则必须添加另一种格式…
创建一个名为time_formats.rb的初始化程序或添加以下内容:
Rails 2ish
ActiveSupport::CoreExtensions::Date::Conversions::DATE_FORMATS.merge!({
:time_long => "%H:%M:%S"
})
导轨3
Time::DATE_FORMATS.merge!(
:time_long => "%H:%M:%S"
)
然后在您的取景器中,就像这样:
def self.now_playing
time = Time.now
self.find(:first,time.strftime('%A'),time.to_s(:time_long),time.to_s(:time_long)])
end
可以在这里找到更多信息:http://jasonseifer.com/2010/03/10/rails-date-formats
或这里:http://brian.rarevisions.net/extending-date-formats-in-rails-3