Поскольку вы полностью игнорируете дату и, возможно, имеете числа, превышающие 24, как число часов, возможно, существующие классы Ruby вам не подходят (по крайней мере, из стандартной библиотеки lib).
На самом деле, есть несколько способов, которые могут быть полезны: time_to_day_fraction и day_fraction_to_time , но по какой-то причине они являются закрытыми (по крайней мере, в 1.9.1).
Таким образом, вы можете либо обезопасить их, чтобы сделать их общедоступными, либо просто скопировать и вставить их реализацию в ваш код:
def time_to_day_fraction(h, min, s)
Rational(h * 3600 + min * 60 + s, 86400) # 4p
end
def day_fraction_to_time(fr)
ss, fr = fr.divmod(Rational(1, 86400)) # 4p
h, ss = ss.divmod(3600)
min, s = ss.divmod(60)
return h, min, s, fr
end
Они работают с Rational
классом, так что вы можете легко вычислить с ними.