以下内容返回(5/12)
,Rational
个对象。
d = DateTime.current
d2 = d + 10.hours
d2 - d
我如何从两个时间点得到微小的差异?
答案 0 :(得分:1)
DateTimes最终只是一个数字,浮点数或int,在引擎盖下,数字表示自纪元以来的秒数。当你进行加法和减法时,它使用这些数字进行数学计算,如果结果是日期时间,它通常会返回一个日期时间,但如果没有,它只会返回数字。
当您从另一个时间减去时间时,差异是秒数。 Rational
类是一种将数字保存为分数而不是Float或Int的方法。
调用to_i
或to_f
会将数字转换为int或float,具体取决于您的要求。然后你有几秒钟的时间,你可以把它除以60分钟就可以把它转换成几分钟。
注意这个问题:在ruby中,如果将int除以int,它将向下舍入结果以使其保持为int。例如
90/60
=> 1
如果你想要一个浮点数,在这种情况下为1.5,请确保该除法的至少一个操作数是浮点数。
所以,这应该有效:
d = DateTime.current
d2 = d + 10.hours
diff_minutes = (d2 - d)/60.0
答案 1 :(得分:1)
(d2 - d).class
=> Rational
Rational:有理数可以表示为成对的整数; a / b(b> 0)。其中a是分子,b是分母。整数a等于理性a / 1数学。
d2 - d
=> (5/12) #get the number of days
((d2 - d) * 24 * 60).to_i
=> 600 # get the number of minutes
答案 2 :(得分:1)
date_diff = date_2 - date_1
date_diff_array = Date.day_fraction_to_time(diff) # => [h, m, s, frac_s]
date_diff_array[0] # hours
date_diff_array[1] # minutes
date_diff_array[2] # seconds