比较Ruby中两个Time对象的日期的最佳方法是什么?
我有两个对象,例如:
time_1 = Time.new(2012,12,10,10,10)
time_2 = Time.new(2012,12,11,10,10)
在此示例中,日期比较应返回false。
否则,相同的日期,但不同的时间,应该返回true:
time_1 = Time.new(2012,12,10,10,10)
time_2 = Time.new(2012,12,10,11,10)
我尝试使用适用于.to_date
个对象的DateTime
,但Time
不支持它。
答案 0 :(得分:7)
只需要stdlib的'date'部分,然后比较日期:
require "date"
time1.to_date == time2.to_date
完成工作。
答案 1 :(得分:3)
我已经确认这对我有用:
time_1.strftime("%F") == time_2.strftime("%F")
%F
格式仅返回日期部分。
答案 2 :(得分:3)
也许只是这样测试:
time_1.year == time_2.year && time_1.yday == time_2.yday
与字符串比较相比,它的资源消耗更少。
使用此方法修补课程时间,我会很高兴阅读
class Time
def date_compare(time)
year == time.year && yday == time_2.yday
end
end
time_1.date_compare time_2
答案 3 :(得分:1)
to_date在ruby 2.0和ruby 1.9.3以及ruby 1.9.2中工作得很好http://ruby-doc.org/stdlib-1.9.2/libdoc/date/rdoc/Time.html
>> time_1.to_date
=> #<Date: 2012-12-10 ((2456272j,0s,0n),+0s,2299161j)>
但它不在ruby 1.8.7 http://ruby-doc.org/stdlib-1.8.7/libdoc/time/rdoc/Time.html的stdlib中 - 但是,你创建时间对象的方式在该版本中也不起作用:
> time_1 = Time.new(2012,12,10,10,10)
ArgumentError: wrong number of arguments (5 for 0)