涉及utc的Ruby时间操作

时间:2011-09-19 01:37:55

标签: ruby time utc

为什么这个表达式返回false?

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

为什么要考虑结果的差异?哪种方式是正确的?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

查看Time班级here的文档。

答案 2 :(得分: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相同,它只显示到最近的秒的时间。但内部分辨率远小于一秒。