我想比较两个时间对象只有小时,而忽略分钟和秒的差异。
我目前正在使用t0.strftime("%Y%m%d%H") == t1.strftime("%Y%m%d%H")
,但我认为这不是一个好的解决方案。
有更好的方法吗?
答案 0 :(得分:2)
你可以在纯Ruby中使用这个技巧
t0.to_a[2..9] == t1.to_a[2..9]
$> Time.now.to_a
# => [7, 44, 2, 8, 3, 2014, 6, 67, false, "GMT"]
# [ sec, min, hour, day, month, year, wday, yday, isdst, zone ]
因此,你可以检查时间是否等于你想要的水平,而不会遗漏对象的重要组成部分,如区域等。
答案 1 :(得分:0)
如果您有ActiveSupport(通过Rails,或者只是作为gem安装),它包含Time
类的extension,它会添加change
方法,该方法会截断时间:
$> require "active_support/core_ext/time"
# => true
$> t = Time.now
# => 2014-03-07 21:30:01 -0500
$> t.change(hour: 0)
# => 2014-03-07 00:00:00 -0500
这也不会修改原始时间值。所以你可以这样做:
t0.change(minute: 0) == t1.change(minute: 0)
它会以较低的粒度(秒等)将所有内容归零。
答案 2 :(得分:0)
require 'time'
t1 = Time.new ; sleep 30 ; t2 = Time.new
t1.hour == t2.hour
这应该给你一个布尔答案。