测试ActiveSupport :: TimeWithZone对象是否相等 [英] Testing ActiveSupport::TimeWithZone objects for equality

查看:143
本文介绍了测试ActiveSupport :: TimeWithZone对象是否相等的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有人可以解释d1是否大于d2?

 载入开发环境(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对象,除了其他项目之外,还包括2011-09-22T02:24:28-07:00格式的NSDates。我试图比较该datetime与类型ActiveSupport :: TimeWithZone的updated_at。



谢谢 - wg

updated_at 属性的精度高于秒。



尝试输出您各自的时间对象的毫秒部分:

  puts d1.usec 
puts d2.usec

几率是> 0,因为它被自动设置当对象被持久化,而后者将等于0,因为你没有在解析它的字符串中指定任何毫秒。


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

解决方案

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.

这篇关于测试ActiveSupport :: TimeWithZone对象是否相等的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆