ruby - ruby 2 中的 DateTime 减法?

标签 ruby datetime ruby-2.2

我需要减去两个 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,我得到天数。但是,当我尝试用相差 1 小时的时间减去两个 DateTime 时,得到的结果是 -1,即小时数。那么,如何同时找出返回值(小时、天、年、秒)的含义呢?

最佳答案

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

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

要得到小时数,将结果乘以 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 - ruby 2 中的 DateTime 减法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30953974/

相关文章:

ruby-on-rails - 如何在 Ruby 中使用 RbVmomi 调整 VM 磁盘大小

arrays - 查找两个元素之间的数组中的所有元素

ruby - 我怎样才能得到特殊字符前的句子(比如 :) by Ruby?

MYSQL 包括项目计数为零的日期值

Ruby 2.2.2 注册文档

http - Ruby HTTParty - 获取重定向的 URL

ruby - 在 Sinatra post 上读取参数

sql - T-SQL将日期时间修整到最接近的日期?

java - 从 UNIX 时间到日历的转换 - 存在一小时的不一致

ruby-on-rails - rails 服务器无法启动; getaddrinfo : nodename nor servname provided, 或未知 (SocketError)