Это ошибка в классе времени Ruby при выполнении арифметики относительной даты? - PullRequest
1 голос
/ 29 августа 2011

Может кто-нибудь сказать мне, если это ошибка в классе времени ruby?

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, который, по моему мнению, обеспечивает эту функциональность.

Спасибо.

** ОБНОВЛЕНИЕ **

И теперь все работает, без каких-либо изменений, кроме меня, когда я ложусь спать, просыпаюсь и снова бегаю.Это очень странно;Фрагмент, который я предоставил выше, был непосредственно вырезан и вставлен из моего окна терминала .... Я работал с 3.0.10 из activerecord / support / model / etc

Спасибо всем за ваши мысли по этому вопросу!

Ответы [ 3 ]

3 голосов
/ 29 августа 2011

Хотя time.to_s не включает его, объект Time содержит миллисекунды - и не только, он содержит доли секунды (с гораздо более высоким разрешением) (см .: Time # subsec ).

Time.now == Time.now уже будет ложным, потому что каждый вызов now займет несколько тактов процессора для завершения.Также взгляните на Time # eql? .

Верните true, если time и other_time являются обоими объектами времени с одинаковыми секундами и долями секунды.

0 голосов
/ 29 августа 2011

То, что @ marcel-jackwerth говорит правильно.Подключите его, если вы хотите, чтобы они были одинаковыми (поскольку существует высокая вероятность того, что вызовы будут обрабатываться в одну секунду):

ruby-1.8.7-p330 :021 > (Time.now + 1.day).to_i == (Time.now + 1.day).to_i
=> true 
0 голосов
/ 29 августа 2011

Конечно, это не ошибка в классе Time, потому что разница, похоже, в методе day класса Fixnum.Более того, это не метод оригинального класса Fixnum;это должно быть определено в каком-то файле, который вы require d ранее.

...