2011-09-22 11 views
10

Czy ktoś może wyjaśnić, w jaki sposób d1 jest większe niż d2? Są to te same cholerne daty (a przynajmniej tak do mnie patrzą).Testowanie obiektów ActiveSupport :: TimeWithZone dla równości

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 > 

W odniesieniu do moich specyficznych potrzeb aplikacyjnych ... Mam aplikację na iOS, która występuje z wnioskiem do aplikacji Moje Rails przekazując obiekt JSON, który, między innymi, zawiera NSDates w formacie „2011-09 -22T02: 24: 28-07: 00. " Próbuję porównać tę datetime z "updated_at", który jest typu ActiveSupport :: TimeWithZone.

Dzięki - WG

Odpowiedz

19

Przekonasz się, że atrybut w modelu zdarzeń updated_at ma większą precyzję niż kilka sekund.

Spróbuj wyprowadzania milisekundy część swoich odpowiednich obiektów czas:

puts d1.usec 
puts d2.usec 

Szanse są byłej będzie> 0, ponieważ został ustawiony automatycznie, gdy obiekt został utrzymywały, a drugi będzie równa 0, ponieważ zrobiłeś nie określa żadnych milisekund w łańcuchu, z którego je przeanalizowano.

+0

Tak, to jest to. Jaki byłby najlepszy sposób porównania tych dat, aby nie brać pod uwagę porównania? – wgpubs

+6

Wypróbuj 'd1.to_i == d2.to_i'. http://www.ruby-doc.org/core/classes/Time.html#M000339 –

Powiązane problemy