ruby 2中的DateTime减法?

Den*_*nko 11 ruby datetime ruby-2.2

我需要减去两个DateTime对象,以便找出它们之间的小时差异.

我尝试执行以下操作:

a = DateTime.new(2015, 6, 20, 16)
b = DateTime.new(2015, 6, 21, 16)
puts a - b
Run Code Online (Sandbox Code Playgroud)

我知道(-1/1)了,上课的对象Rational.

所以,问题是,我如何找出这两个日期之间的差异是什么?几小时或几天,或其他什么.

Rational当我减去DateTimes时,这意味着什么/代表什么?

BTW:

当我试图减去DateTime1年的差异时,我得到了(366/1),所以当我这样做时(366/1).to_i,我会得到天数.但是当我尝试DateTime用1小时的差异减去两个 时,它给了我-1,小时数.那么,我如何找出返回值(小时,天,年,秒)的含义?

jaz*_*ato 12

当你减去两个日期时间时,你会得到天数而不是几小时的差异.

你得到一个Rational精度类型(一些浮点数不能用计算机精确表示)

要获得一些小时,将结果乘以24,分钟乘以24*60等...

a = DateTime.new(2015, 6, 20, 16)
b = DateTime.new(2015, 6, 21, 16)

(a - b).to_i 
# days
# => -1

((a - b)* 24).to_i  
# hours
# => -24
# ...
Run Code Online (Sandbox Code Playgroud)

这是官方文档的链接


Exu*_*ery 10

如果你作为Time对象对它们进行减法,它将在几秒钟内返回结果,然后你可以相应地乘以得到分钟/小时/天/等等.

a = DateTime.new(2015, 6, 20, 16)
b = DateTime.new(2015, 6, 21, 16)
diff = b.to_time - a.to_time    # 86400
hours = diff / 60 / 60          # 24
Run Code Online (Sandbox Code Playgroud)