Рубиновые операции с участием utc - PullRequest
2 голосов
/ 19 сентября 2011

Почему это выражение возвращает ложь?

(Time.now - 10.hours).utc == Time.now.utc - 10.hours

Почему учитывается разница в результатах? И какой путь правильный?

Ответы [ 3 ]

1 голос
/ 19 сентября 2011

Выражения эквивалентны, но при последовательном вызове не будут возвращать тот же результат.Примечание:

Time.now == Time.now #=> false
Time.now - Time.now #=> Some really small negative number

Если вы наберете Time.now два раза подряд, второй произойдет после первого, верно?Даже если это очень короткое время спустя.

Я бы не сказал, что любая форма более правильная.Если вы сохраните Time.now и проведете такое же сравнение, вы получите ожидаемый результат.

t = Time.now
t.utc = 10.hours == (t - 10.hours).utc #=> true
0 голосов
/ 19 сентября 2011
(Time.now - 10.hours).utc.to_s == (Time.now.utc - 10.hours).to_s ==> true

(Time.now - 10.hours).utc - (Time.now.utc - 10.hours) ==> a small, non-zero
                                                          number. IE -1.3e-05

Обратите внимание, что a_time.to_s совпадает с a_time.inspect и показывает только время с точностью до секунды.Но внутреннее разрешение намного меньше секунды.

0 голосов
/ 19 сентября 2011

Потому что они не одинаковы. Rubys Time.now отслеживает время до доли секунды, вывод #to_s просто не показывает этого.

>> Time.now == Time.now
=> false
>> Time.now.to_i == Time.now.to_i  
=> true
>> Time.now.to_f == Time.now.to_f
=> false

Ознакомьтесь с документацией для Time класса здесь .

...