2011-09-22 12 views
10

Qualcuno può spiegare come d1 è maggiore di d2? Sono le stesse dannate date (o almeno così mi guardano).Test di ActiveSupport :: TimeWithZone oggetti per l'uguaglianza

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 > 

Per quanto riguarda le mie specifiche esigenze applicative ... Ho un app iOS che fa una richiesta di applicazione Rails miei passando un oggetto JSON che, tra le altre cose, include NSDates nel formato di "2011-09 -22T02: 24: 28-07: 00 ". Sto tentando di confrontare quel datetime con "updated_at" che è di tipo ActiveSupport :: TimeWithZone.

Grazie - wg

risposta

19

Troverete che l'attributo updated_at nel modello di evento ha una precisione maggiore di secondi.

Prova emettere la parte millisecondi dei vostri rispettivi oggetti di tempo:

puts d1.usec 
puts d2.usec 

È probabile che l'ex sarà> 0 da quando è stato impostato automaticamente quando l'oggetto è stato persisteva, mentre il secondo sarà uguale a 0 dal momento che hai fatto non specificare alcun millisecondo nella stringa da cui è stato analizzato.

+0

Sì, è così. Quale sarebbe il modo migliore per confrontare queste date in modo che non venga preso in considerazione nel confronto? – wgpubs

+6

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

Problemi correlati