将Ruby中的持续时间 – hh:mm:ss.sss转换为毫秒,反之亦然

我想知道Ruby中是否有内置方法允许我将hh:mm:ss.sss格式的单圈时间转换为毫秒,反之亦然。 由于我需要对它进行一些计算,我认为转换为毫秒将是最简单的方法。 告诉我,如果我错在这里:)

这个怎么样?

 a=[1, 1000, 60000, 3600000]*2 ms="01:45:36.180".split(/[:\.]/).map{|time| time.to_i*a.pop}.inject(&:+) # => 6336180 t = "%02d" % (ms / a[3]).to_s << ":" << "%02d" % (ms % a[3] / a[2]).to_s << ":" << "%02d" % (ms % a[2] / a[1]).to_s << "." << "%03d" % (ms % a[1]).to_s # => "01:45:36.180" 

由于您完全忽略日期,并且可能将数字大于24作为小时数,因此现有的Ruby类可能不适合您(至少来自标准库中的类)。

实际上,有几种方法可能会有所帮助: 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类,因此您可以使用它们轻松计算。

在Ruby中将秒转换为HH:MM:SS

 t = 323 # seconds Time.at(t).utc.strftime("%H:%M:%S") => "00:03:56"