2011-09-19 46 views
2

为什么这个表达式返回false?Ruby时间操作涉及utc

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

为什么会计算结果的差异?哪种方法是正确的?

回答

0

因为它们不一样。 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 

检查出hereTime类的文档。

+0

当然,如果你运行足够多的时间,'Time.now.to_i == Time.now.to_i'并不总是如此。 – numbers1311407

+0

太好了。感谢您的回应。这就说得通了。我最初的反应是它与系统耗用时间有关,但想要问问并确定。 – keruilin

1

表达式是等价的,但按顺序调用时,不会返回相同的结果。注:

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

很好的答案。感谢您抽出宝贵的时间。 – keruilin

0
(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相同,它只显示时间到最近的秒。但内部分辨率比一秒小得多。