所以我通过使用类Time
之一的object属性来查找记录时遇到了问题。
事实证明,当我将params
作为time
传递给我的控制器时,控制器又将其发送给模型......我发送的Time.parse(<stringified time>)
对象会被字符串化。
所以我想我会通过<stringified time>.to_time
或2.2.0 :003 > a = Time.now
=> 2015-10-14 20:50:19 +0100
2.2.0 :004 > b = a.to_s
=> "2015-10-14 20:50:19 +0100"
2.2.0 :005 > c = Time.parse b
=> 2015-10-14 20:50:19 +0100
2.2.0 :006 > c == a
=> false
2.2.0 :007 > a.class
=> Time
2.2.0 :008 > c.class
=> Time
2.2.0 :015 > a - c
=> 0.951439
2.2.0 :016 > d = b.to_time
=> 2015-10-14 20:50:19 +0100
2.2.0 :017 > c - d
=> 0.0
- (使用导轨)将其转换回时间
但我的测试仍然失败,所以我决定去看看那里发生了什么。
这是我发现的:
a - c
我的困惑主要来自:0.951439
给了我<textarea>
。这种差异来自哪里?
最重要的是,我如何让这两者相等?非常感谢,所有。
答案 0 :(得分:2)
原因:
自Ruby 1.9.2起,Time实现使用带符号的63位整数, Bignum或Rational。整数是纳秒数,因为 可以代表1823-11-12到2116-02-20的时代。当Bignum或 使用Rational(在1823之前,在2116之后,在纳秒之下),时间 使用整数时效果较慢。
如果你运行a = Time.now
,你的纪元加上 P纳秒就会有N秒。但是当你运行Time.parse b
时,你的数字秒数相同但零纳秒。这就是你要找的东西。
Loading development environment (Rails 4.2.4)
[1] pry(main)> a = Time.now
=> 2015-10-14 23:41:12 +0300
[2] pry(main)> a.nsec
=> 733355000
[3] pry(main)> Time.parse(a.to_s).nsec
=> 0
所以你必须避免这种纳米的东西。例如,你可以这样写:
[16] pry(main)> a = Time.at(Time.now.to_i)
=> 2015-10-14 23:47:59 +0300
[17] pry(main)> a.nsec
=> 0