Ruby:比较两个Time对象的日期

时间:2013-09-17 07:39:03

标签: ruby date datetime time

比较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不支持它。

4 个答案:

答案 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)