Тестирование ActiveSupport :: TimeWithZone объектов на равенство - PullRequest
10 голосов
/ 22 сентября 2011

Может кто-нибудь объяснить, как 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 «. Я пытаюсь сравнить эту дату и время с "updated_at", который имеет тип ActiveSupport :: TimeWithZone.

Спасибо - РГ

1 Ответ

21 голосов
/ 22 сентября 2011

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

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

puts d1.usec
puts d2.usec

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

...