「Ruby」Timeクラスの比較
Time#to_sしてみると同じ年月日時間分秒なのに、比較するとFalseを返してうーん?と思ったメモ。
RubyのTimeクラスは内部でUNIXTIMEを持ってると思ってたけど、最小単位が秒の整数型じゃなくて、浮動小数点みたい。つまり秒未満の値も持ってる(ms単位以下のタイマー精度がどれほどなのかは不明、環境依存してそう)。なので、Time.nowみたいなメソッドだと同じ時間は作れない。
irb(main):001:0> Time.now == Time.now => false irb(main):002:0> Time.now > Time.now => false irb(main):003:0> Time.now < Time.now => true irb(main):004:0> Time.at(Time.now.to_i) == Time.at(Time.now.to_i) => true irb(main):005:0> Time.now.to_f => 1239906600.3743 irb(main):006:0> Time.now.to_f => 1239906602.24573
小数点以下を消して整数型にして作成しなおすと、端数が消えてわかりやすく比較できるレベルになる。(当然↑のサンプルだとTime.nowと2回目のTime.nowが秒を跨ぐこともあるだろうけども)
そんな小ネタでした。