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

时间:2010-03-04 09:43:40

标签: ruby time

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

3 个答案:

答案 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_fractionday_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"