2011-09-19 106 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相同,它只顯示時間到最近的秒。但內部分辨率比一秒小得多。