Ruby on rails Ruby日期方程未返回期望的真值

Ruby on rails Ruby日期方程未返回期望的真值,ruby-on-rails,ruby,date,Ruby On Rails,Ruby,Date,为什么以下各点不同 Time.now.end_of_day == Time.now.end_of_day - 0.days # false Time.now.end_of_day.to_s == Time.now.end_of_day - 0.days.to_s # true 因为纳秒数不同: ruby-1.9.2-p180 :014 > (Time.now.end_of_day - 0.days).nsec => 999999000 ruby-1.9.2-

为什么以下各点不同

Time.now.end_of_day      == Time.now.end_of_day - 0.days      # false
Time.now.end_of_day.to_s == Time.now.end_of_day - 0.days.to_s # true

因为纳秒数不同:

ruby-1.9.2-p180 :014 > (Time.now.end_of_day - 0.days).nsec
 => 999999000 
ruby-1.9.2-p180 :015 > Time.now.end_of_day.nsec
 => 999999998 

正如米沙所说,时间相差纳秒。这是一篇关于在Rails中执行此操作的变通方法和修复方法的文章,特别是针对您正在进行的测试


给出的看似最直接的方法是通过在_i中添加
,将时间四舍五入到秒,但还有其他选择。

要扩展Misha的答案:

从中可以看出:“所有时间都可能有分数。在相互比较时间时,请注意这一事实。显示时明显相等的时间在比较时可能不同。”


因此,第一次计算比较两个时间对象,它们在纳秒级上不同,但第二次计算将两个时间对象转换为字符串,忽略纳秒并返回true,因为两个字符串表示形式匹配。

什么是
Time.now.end_of_day.to_s==Time.now.end_of_day.to_-((1-1)*7).days.to_
返回比?或者可能是
Time.now.end\u of_day.to\u s==(Time.now.end\u of_day-((1-1)*7)天)。对于Phrogz,这并不能解决问题。我认为乔治是对的,你必须用
来告诉我@misha多么有趣;谢谢你纠正我。我个人认为在<代码>中的一个bug。纳秒是存在的,当然,但如果一天的结束距离一天的结束只有几纳秒,那么它就不是,呃,一天的结束;)但是当你从中减去0.5天,它离一天结束的时间甚至更远。因此,如果有一个bug,它是在
而不是
一天的结束时间