为什么以下不同?
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
为什么以下不同?
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 中执行此操作的解决方法和修复的文章,特别是针对您正在做的测试。
给出的看似最直接的方法是通过附加将时间四舍五入到秒.to_i
,但还有其他选择。
扩展米沙的答案:
来自Time 对象的文档:“所有时间都可能有分数。在相互比较时间时请注意这一事实 - 显示时明显相等的时间在比较时可能不同。”
因此,您的第一个计算比较了两个 Time 对象,它们在纳秒级别上是不同的,但是您的第二个计算将两个 Time 对象都转换为字符串,它忽略了纳秒并返回 true,因为两个字符串表示都匹配。