eir*_*kir 0 ruby time ruby-2.1
在Ruby 2.1.2,我可以成功地比较的结果Time.parse,并Time.utc在同一时间,它返回预期true:
Time.parse("2015-02-09T22:38:43Z") == Time.utc(2015, 2, 9, 22, 38, 43)
=> true
Run Code Online (Sandbox Code Playgroud)
但是,false当第二个值不是整数时,同样的比较会违反直觉:
Time.parse("2015-02-09T22:38:43.1Z") == Time.utc(2015, 2, 9, 22, 38, 43.1)
=> false
Run Code Online (Sandbox Code Playgroud)
尽管事实上第二个值仍然是整数并且仍然是等价的:
Time.parse("2015-02-09T22:38:43.1Z").sec
=> 43
Time.utc(2015, 2, 9, 22, 38, 43.1).sec
=> 43
Time.parse("2015-02-09T22:38:43.1Z").sec == Time.utc(2015, 2, 9, 22, 38, 43.1).sec
=> true
Run Code Online (Sandbox Code Playgroud)
而且,比较结果true是在相同方法的连续调用之间:
Time.parse("2015-02-09T22:38:43.1Z") == Time.parse("2015-02-09T22:38:43.1Z")
=> true
Time.utc(2015, 2, 9, 22, 38, 43.1) == Time.utc(2015, 2, 9, 22, 38, 43.1)
=> true
Run Code Online (Sandbox Code Playgroud)
为什么会这样?这是一个错误,还是我错过了什么?
Ruby在比较时间时比较小数秒和秒.出于某种原因,您的时间会收到不同的小数秒:
Time.parse("2015-02-09T22:38:43.1Z").subsec
# => (1/10)
Time.utc(2015, 2, 9, 22, 38, 43.1).subsec
# => (14073748835533/140737488355328)
Run Code Online (Sandbox Code Playgroud)