irbで確認
irb(main):002:0> a = b = Time.now
=> Sat Mar 29 20:07:31 +0900 2008
irb(main):003:0> a == b
=> true
これは当たり前だ。同じオブジェクト指してるわけだし。
irb(main):004:0> a = Time.now
=> Sat Mar 29 20:08:18 +0900 2008
irb(main):005:0> b = Time.parse(a.to_s)
=> Sat Mar 29 20:08:18 +0900 2008
irb(main):006:0> a == b
=> false
げ。なんでfalse。
原因
簡単なことだった。
irb(main):004:0> a = Time.now
=> Sat Mar 29 20:08:18 +0900 2008
irb(main):005:0> b = Time.parse(a.to_s)
=> Sat Mar 29 20:08:18 +0900 2008
irb(main):006:0> a == b
=> false
irb(main):007:0> a - b
=> 0.859
irb(main):008:0> a.usec
=> 859000
irb(main):009:0> b.usec
=> 0
Time.nowには浮動小数点が含まれている。Time.parseとかlocalでやると、浮動小数点は0なんだ。
あ、今のは嘘だ。ごめんなさい(ノд`)Time.localはusecは指定できる。parseは無理のようです。
Time.local(year[, mon[, day[, hour[, min[, sec[, usec]]]]]])
まぁ、Timeの値は浮動小数点が考慮されていることを忘れないようしよう。