Ruby: сравнение дат двух временных объектов
каков наилучший способ сравнить даты двух объектов времени в Ruby?
у меня есть два объекта, такие как:
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 ответов
просто требуется часть "дата" stdlib, затем сравните даты:
require "date"
time1.to_date == time2.to_date
работу.
Я проверил, что это работает для меня:
time_1.strftime("%F") == time_2.strftime("%F")
на %F
format возвращает только часть даты.
может быть, просто тестирование таким образом:
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
to_date отлично работает в ruby 2.0 и ruby 1.9.3 и ruby 1.9.2http://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)>
но это не в stdlib ruby 1.8.7 http://ruby-doc.org/stdlib-1.8.7/libdoc/time/rdoc/Time.html - но тогда ваш способ создания объекта времени также не работает в этой версии:
> time_1 = Time.new(2012,12,10,10,10)
ArgumentError: wrong number of arguments (5 for 0)