Ruby时间减法

时间:2014-12-07 10:42:27

标签: ruby

有以下任务:我需要在一次和另一次之间获得分钟:例如,在“8:15”和“7:45”之间。我有以下代码:

(Time.parse("8:15") - Time.parse("7:45")).minute

但我得到的结果是“108000.0秒”。

我该如何解决?

3 个答案:

答案 0 :(得分:3)

你得到的结果是一个浮点数秒,而不是一个Time对象。所以要获得两次之间的分钟数和秒数:

require 'time'
t1 = Time.parse("8:15")
t2 = Time.parse("7:45")
total_seconds = (t1 - t2) # => 1800.0

minutes = (total_seconds / 60).floor # => 30
seconds = total_seconds.to_i % 60 # => 0

puts "difference is #{minutes} minute(s) and #{seconds} second(s)"

使用floor和模数(%)可以分割分钟数和秒数,因此更具人性化,而不是“6.57分钟”

答案 1 :(得分:1)

时间减法以秒为单位返回值。因此除以60就可以在几分钟内得到答案:

=> (Time.parse("8:15") - Time.parse("7:45")) / 60
#> 30.0

答案 2 :(得分:1)

您可以通过简单地对小时和分钟进行一些数学运算而不是将它们解析为Time个对象来避免奇怪的时间解析陷阱(夏令时,在午夜运行代码)。这些方面的东西(我用测试验证数学):

one = "8:15"
two = "7:45"
h1, m1 = one.split(":").map(&:to_i)
h2, m2 = two.split(":").map(&:to_i)
puts (h1 - h2) * 60 + m1 - m2

如果您确实想要考虑夏令时(例如,您有时希望根据今天的日期添加或减去额外的小时数),那么您当然需要参与Time