我想知道Ruby中是否有内置方法允许我将hh:mm:ss.sss格式的单圈时间转换为毫秒,反之亦然。 由于我需要对它进行一些计算,我认为转换为毫秒是最简单的方法。告诉我,如果我在这里错了:)
答案 0 :(得分:8)
这个怎么样?
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"
答案 1 :(得分:3)
由于您完全忽略了日期,并且可能的数字大小超过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
课程,因此您可以轻松地使用它们进行计算。
答案 2 :(得分:0)
Convert seconds into HH:MM:SS in Ruby
t = 323 # seconds
Time.at(t).utc.strftime("%H:%M:%S")
=> "00:03:56"