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中的日期时间减法?的主要内容,如果未能解决你的问题,请参考以下文章