Тестирование ActiveSupport:: Объекты TimeWithZone для равенства

Может кто-нибудь объяснить, как d1 больше d2? Они такие же проклятые даты (или, по крайней мере, так они выглядят для меня).

Loading development environment (Rails 3.0.8)
ruby-1.9.2-p180 :001 > d1 = Event.first.updated_at
 => Thu, 22 Sep 2011 02:24:28 PDT -07:00 
ruby-1.9.2-p180 :002 > d2 = Time.zone.parse("2011-09-22T02:24:28-07:00")
 => Thu, 22 Sep 2011 02:24:28 PDT -07:00 
ruby-1.9.2-p180 :003 > d1.class
 => ActiveSupport::TimeWithZone 
ruby-1.9.2-p180 :004 > d2.class
 => ActiveSupport::TimeWithZone 
ruby-1.9.2-p180 :005 > d1 > d2
 => true 
ruby-1.9.2-p180 :006 > 

Что касается моих конкретных приложений... У меня есть приложение iOS, которое делает запрос к моему Rails-приложению, передающему объект JSON, который среди других элементов включает NSDates в формате "2011-09-22T02: 24: 28-07: 00". Я пытаюсь сравнить это datetime с "updated_at", который имеет тип ActiveSupport:: TimeWithZone.

Спасибо - wg

Ответ 1

Вы обнаружите, что атрибут updated_at в вашей модели событий имеет более высокую точность, чем секунды.

Попробуйте вывести часть миллисекунд ваших соответствующих объектов времени:

puts d1.usec
puts d2.usec

Скорее всего, первое будет > 0, поскольку оно было установлено автоматически, когда объект был сохранен, а последний будет равен 0, поскольку вы не указали ни одной миллисекунды в строке, из которой вы ее разобрали.