0

次の例は私を混乱させます。比較が false を返すのはなぜですか?

require 'active_support/time'

time1 = Time.new.utc.end_of_day  # 2013-01-09 23:59:59 UTC
time2 = Time.parse(time1.to_s)   # 2013-01-09 23:59:59 UTC

time1 == time2                   # false
time1.eql?(time2)                # false 
time1.equal?(time2)              # false

私は何を間違っていますか?

4

1 に答える 1

1

time2time1情報が不足している文字列表現から生成されます。つまり、マイクロ秒です。

require 'active_support/time'

time1 = Time.new.utc.end_of_day  # => 2013-01-09 23:59:59 UTC
time2 = Time.parse(time1.to_s)   # => 2013-01-09 23:59:59 UTC

time1.usec # => 999999
time2.usec # => 0

回避策:

マイクロ秒の精度が必要ない場合は、両方のタイムスタンプを秒に丸めることができます。

time1.to_i == time2.to_i # => true
于 2013-01-09T05:37:52.370 に答える