3

Ruby コードをテストしているときに、奇妙な動作に遭遇しました。どちらかから作成された、または から解析さTime.nowれた同じ時間が一致しない理由を誰かが説明できますか?Time.atTime.parse

[1] pry(main)> require 'time'
=> true
[2] pry(main)> t = Time.now
=> 2013-04-04 19:46:49 -0400
[3] pry(main)> i = Time.at t.to_i
=> 2013-04-04 19:46:49 -0400
[4] pry(main)> t == i
=> false
[5] pry(main)> t.to_i == i.to_i
=> true
[6] pry(main)> p = Time.parse t.to_s
=> 2013-04-04 19:46:49 -0400
[7] pry(main)> t == p
=> false
[8] pry(main)> t.to_i == p.to_i
=> true
[8] pry(main)> t.class
=> Time
[9] pry(main)> i.class
=> Time
[10] pry(main)> p.class
=> Time
[11] pry(main)> t.inspect
=> "2013-04-04 19:46:49 -0400"
[12] pry(main)> i.inspect
=> "2013-04-04 19:46:49 -0400"
[13] pry(main)> p.inspect
=> "2013-04-04 19:46:49 -0400"

更新 1

1 秒未満の精度を取得しようとしても、同じ動作を示しているようです。

[1] pry(main)> t = Time.now
=> 2013-04-04 20:04:47 -0400
[2] pry(main)> f = Time.at t.to_f
=> 2013-04-04 20:04:47 -0400
[3] pry(main)> t == f
=> false
[4] pry(main)> t.to_f
=> 1365120287.902954
[5] pry(main)> f.to_f
=> 1365120287.902954
4

3 に答える 3

1

2 つの時間が実際には異なる可能性がありますが、選択した表現との違いは見られません。

試す:

t.to_f == i.to_f

tよりも精度が高いことがわかると思いますi

内部Time的には、1 秒未満の精度で浮動小数点値として表されます。通常、100 万分の 1 秒以内の精度で信頼できますが、OS によってはそれ以上の精度になることもあります。

于 2013-04-05T00:01:20.860 に答える