【问题标题】:DateTime subtraction in ruby 2?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,即小时数。那么,如何也找出返回值(小时、天、年、秒)的含义?

【问题讨论】:

    标签: ruby datetime ruby-2.2


    【解决方案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

      【讨论】:

      • 有趣的是,我在几秒钟内就得到了差异
      猜你喜欢
      • 2018-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多