Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Testing ActiveSupport::TimeWithZone objects for equality

Can someone explain how d1 is greater than d2? They are the same damn dates (or atleast that is how they look to me).

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 > 

With regards to my specific application needs ... I have an iOS app that makes a request to my Rails application passing a JSON object that, amongst other items, includes NSDates in the format of "2011-09-22T02:24:28-07:00." I'm attempting to compare that datetime with the "updated_at" which is of type ActiveSupport::TimeWithZone.

Thanks - wg

like image 620
wgpubs Avatar asked Sep 22 '11 09:09

wgpubs


1 Answers

You will find that the updated_at attribute in your Event model has a higher precision than seconds.

Try outputting the milliseconds part of your respective time objects:

puts d1.usec
puts d2.usec

Chances are the former will be > 0 since it was set automatically when the object was persisted, while the latter will equal 0 since you did not specify any milliseconds in the string from which you parsed it.

like image 88
Lars Haugseth Avatar answered Oct 22 '22 22:10

Lars Haugseth