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,它是在天
而不是一天的结束时间
。