Ruby 2中的日期时间减法?

12

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

我尝试做以下操作:

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

我得到了(-1/1),它是一个Rational类的对象。

所以问题是,如何找出两个日期之间的差异?以小时或天数或其他方式表示。

在我这样做减法时,这个Rational意味着什么或代表什么?

顺便说一下:

当我尝试以1年的时间差减去DateTime时, 我会得到(366/1),因此当我执行(366/1).to_i时,我得到的是天数。但是,当我尝试用1小时的时间差减去两个DateTime时,它给出-1,即小时数。那么,如何找出返回值的含义(小时、天、年、秒)?

2个回答

13

如果将它们作为时间对象进行减法运算,它会返回以秒为单位的结果,然后您可以相应地乘以分钟/小时/天数/其他。

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

13

当你 相减两个日期时间,你会得到天数差距,而不是小时。

你会得到一个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
# ...

这里是官方文档的链接


有趣的是,我得到了以秒为单位的差异 - kev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接