有一个任务:我需要获取两个时间之间的分钟数,例如在“8:15”和“7:45”之间。我有以下代码:
(Time.parse("8:15") - Time.parse("7:45")).minute
但是我得到的结果是"108000.0秒"。
我该如何解决?
(Time.parse("8:15") - Time.parse("7:45")).minute
但是我得到的结果是"108000.0秒"。
我该如何解决?
你得到的结果是秒数的浮点数,而不是时间对象。因此,要获取两个时间之间的分钟数和秒数:
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分钟"。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)
。
=> (Time.parse("8:15") - Time.parse("7:45")) / 60
#> 30.0