小编Gab*_*tah的帖子

Rails/Ruby:TimeWithZone比较莫名其妙地失败了等价值

我在当前项目中使用DateTime比较时遇到了可怕的时间(没有双关语),特别是比较了两个ActiveSupport :: TimeWithZone实例.问题是我的TimeWithZone实例都具有相同的值,但所有比较都表明它们是不同的.

在执行调试期间暂停(使用RubyMine),我可以看到以下信息:

timestamp = {ActiveSupport::TimeWithZone} 2014-08-01 10:33:36 UTC
started_at = {ActiveSupport::TimeWithZone} 2014-08-01 10:33:36 UTC

timestamp.inspect = "Fri, 01 Aug 2014 10:33:36 UTC +00:00"
started_at.inspect = "Fri, 01 Aug 2014 10:33:36 UTC +00:00"
Run Code Online (Sandbox Code Playgroud)

然而,比较表明价值不相等:

timestamp <=> started_at = -1
Run Code Online (Sandbox Code Playgroud)

我在搜索中找到的最接近的答案(两个ActiveSupport :: TimeWithZone对象之间的比较失败)表明同样的问题,我尝试了适用的解决方案但没有成功(尝试db:test:prepare我不运行Spring) .

而且,即使我尝试转换为显式类型,它们在比较时仍然不等同.

TO_TIME:

timestamp.to_time = {Time} 2014-08-01 03:33:36 -0700
started_at.to_time = {Time} 2014-08-01 03:33:36 -0700

timestamp.to_time <=> started_at.to_time = -1
Run Code Online (Sandbox Code Playgroud)

to_datetime:

timestamp.to_datetime = {Time} 2014-08-01 03:33:36 -0700
started_at.to_datetime = {Time} 2014-08-01 03:33:36 -0700

timestamp.to_datetime <=> …
Run Code Online (Sandbox Code Playgroud)

ruby comparison datetime ruby-on-rails

10
推荐指数
1
解决办法
1319
查看次数

标签 统计

comparison ×1

datetime ×1

ruby ×1

ruby-on-rails ×1