5

为什么以下不同?

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
4

3 回答 3

4

因为纳秒数不同:

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 
于 2012-05-02T00:07:21.947 回答
3

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

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

于 2012-05-02T00:09:28.497 回答
2

扩展米沙的答案:

来自Time 对象的文档:“所有时间都可能有分数。在相互比较时间时请注意这一事实 - 显示时明显相等的时间在比较时可能不同。”

因此,您的第一个计算比较了两个 Time 对象,它们在纳秒级别上是不同的,但是您的第二个计算将两个 Time 对象都转换为字符串,它忽略了纳秒并返回 true,因为两个字符串表示都匹配。

于 2012-05-02T00:10:22.617 回答