在进行相对日期算术时,这是Ruby时间类中的错误吗?

时间:2011-08-29 10:34:34

标签: ruby activerecord time activesupport

有人能告诉我这是不是红宝石时间班的错误?

ruby-1.8.7-p334 :021 > now = Time.now
 => Mon Aug 29 03:32:25 -0700 2011 
ruby-1.8.7-p334 :022 > raise "This should not fail" if (now + 1.day != now + 1.day.to_i)
RuntimeError: This should not fail
    from (irb):22
ruby-1.8.7-p334 :023 > 

正如您所看到的,我遇到了运行时错误,我不相信我应该这样做。我最近升级了active_support gem,我相信它提供了这个功能。

谢谢。

**更新**

而且,现在它起作用,除了我睡觉,醒来和重新运行之外没有任何变化。这很奇怪;我上面提供的代码片段是直接从我的终端窗口剪切粘贴的....我正在运行3.0.10的activerecord / support / model / etc

感谢大家对此事的想法!

3 个答案:

答案 0 :(得分:3)

虽然time.to_s不包含它,但Time对象包含毫秒 - 不仅如此,它还包含小数秒(分辨率更高)(参见:Time#subsec)。

Time.now == Time.now已经是假的,因为每次调用now都需要几个CPU滴答才能完成。另请查看Time#eql?

  

如果time和other_time都是具有相同秒数和小数秒的Time对象,则返回true。

答案 1 :(得分:0)

肯定这不是Time类中的错误,因为差异似乎在day类的Fixnum方法中。而且,这不是原始Fixnum类的方法;它应该在require之前的某个文件中定义。

答案 2 :(得分:0)

@marcel-jackwerth所说的是正确的。如果你想看到它们相同(因为很有可能在同一秒内处理呼叫),请将其插入:

ruby-1.8.7-p330 :021 > (Time.now + 1.day).to_i == (Time.now + 1.day).to_i
=> true