ruby 2中的日期时间减法?

Posted

技术标签:

【中文标题】ruby 2中的日期时间减法?【英文标题】:DateTime subtraction in ruby 2? 【发布时间】:2015-09-06 08:54:35 【问题描述】:

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

我尝试执行以下操作:

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

我得到(-1/1),类Rational的对象。

那么,问题是,我如何找出这两个日期之间的差异?数小时或数天,或其他任何时间。

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

顺便说一句:

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

【问题讨论】:

【参考方案1】:

如果您将它们作为 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

【讨论】:

【参考方案2】:

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

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

Here's a link to the official doc

【讨论】:

有趣的是,我在几秒钟内就得到了差异

以上是关于ruby 2中的日期时间减法?的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本中的日期转换和减法

如何检查变量是不是是 Ruby 中的日期或时间或日期时间?

Ruby 中的日期时间解析

Ruby中日期时间和时间的区别

SQL请教大家一个日期的加减法

ruby 中的新日期时间而不是字符串