Длительность преобразования в руби - чч: мм: сс.ссс в миллисекунды и наоборот - PullRequest
7 голосов
/ 04 марта 2010

Мне было интересно, есть ли в Ruby встроенный метод, который позволяет мне преобразовывать время круга в формате чч: мм: сс.ссс в миллисекунды и наоборот. Поскольку мне нужно выполнить некоторые вычисления, я предположил, что преобразование в миллисекунды было бы самым простым способом сделать это. Скажите, если я не прав здесь:)

Ответы [ 3 ]

8 голосов
/ 04 марта 2010

Как насчет этого?

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"
3 голосов
/ 04 марта 2010

Поскольку вы полностью игнорируете дату и, возможно, имеете числа, превышающие 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 классом, так что вы можете легко вычислить с ними.

0 голосов
/ 28 августа 2015

Конвертировать секунды в ЧЧ: ММ: СС в рубине

t = 323 # seconds
Time.at(t).utc.strftime("%H:%M:%S")
=> "00:03:56"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...