如何比较两个时间对象只到小时

时间:2014-03-08 02:20:20

标签: ruby

我想比较两个时间对象只有小时,而忽略分钟和秒的差异。

我目前正在使用t0.strftime("%Y%m%d%H") == t1.strftime("%Y%m%d%H"),但我认为这不是一个好的解决方案。

有更好的方法吗?

3 个答案:

答案 0 :(得分:2)

你可以在纯Ruby中使用这个技巧

t0.to_a[2..9] == t1.to_a[2..9]

Time#to_a

$> 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

这应该给你一个布尔答案。