Ruby 为什么日期之间的减法返回一个有理类型?

Ruby 为什么日期之间的减法返回一个有理类型?,ruby,Ruby,我正在尝试对日期执行减法运算 date_sent = Date.parse("2013-01-01") #=> Tue, 01 Jan 2013 date_now = Date.today #=> Wed, 04 Sep 2013 days = (date_now - date_sent) #=> (246/1) 为什么date\u now-date\u sent返回一个Rational类型?您可能想找到两个DateTime之间的差异,这可能是Rational。例如: Da

我正在尝试对日期执行减法运算

date_sent = Date.parse("2013-01-01") #=> Tue, 01 Jan 2013
date_now = Date.today  #=> Wed, 04 Sep 2013
days = (date_now - date_sent) #=> (246/1)
为什么
date\u now-date\u sent
返回一个
Rational
类型?

您可能想找到两个
DateTime
之间的差异,这可能是
Rational
。例如:

DateTime.new(2001,2,3) - DateTime.new(2001,2,2,12)
# ⇒ (1/2)

因为有时会发生如下比较:

date_sent = DateTime.parse("2013-01-01 12:00:00") # with half a day
date_now = Date.today

days = (date_now - date_sent) # => (491/2)

这是预期的行为。从:

d-其他→ 日期或理性

Date.new(2001,2,3) - 1               #=> #<Date: 2001-02-02 ...>
Date.new(2001,2,3) - Date.new(2001)  #=> (33/1)
而float不能:

diff.to_f
#=> 0.9583333333333334

这也让我感到困惑

日与日之间的差值始终是一个整数,那么为什么要将其表示为有理数呢

这是因为它的返回类型与用于表示日期和日期时间或两个日期时间之间的差异的返回类型相同。这样,您就可以表示两个时间之间的差异

我个人不认为这是最好的选择,例如:

Time.now.to_datetime-Date.today
返回:

=> (44150896597/86400000000)
它认为这更清楚:

=> 0.5110978639814815

这两个时间间隔是否少于一天并不重要。即使是相隔数年的两个时间,你也需要此功能以不到一天的准确度来了解差异。我只是使用了ruby doc中的一个示例。我没有提到你的示例。我只是提到你的解释。现在,你的答案是重言式。X因为X@sawa请去阅读字典中关于“重言式”一词的解释。
DateTime
中提到的没有。我怎样才能将Rational转换为分钟?@AlexanderSupertramp乘以1440(1天=1440分钟)
=> 0.5110978639814815