我在当前项目中使用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)