Вычисление разницы между длительностями в миллисекундах в Ruby

TL; DR: Мне нужно получить разницу между HH: MM: SS.ms и HH: MM: SS.ms as HH: MM: SS: ms


Что мне нужно:

Вот хитрый вопрос. Я пытаюсь вычислить разницу между двумя временными метками, например:

In: 00:00:10.520
Out: 00:00:23.720

Должен доставить:

Diff: 00:00:13.200

Я решил проанализировать время в реальных объектах Time и использовать там разницу. Это отлично работает в предыдущем случае и возвращает 00: 0: 13.200 .

Что не работает:

Однако для некоторых это работает неправильно, поскольку Ruby использует мсек вместо мсек :

In: 00:2:22.760
Out: 00:2:31.520
Diff: 00:0:8.999760

Очевидно, разница должна быть 00: 00: 8: 760 , а не 00: 00: 8.999760 . Мне очень хочется просто tdiff.usec.to_s.gsub ('999', '') ……


Мой код на данный момент:

Вот мой код на данный момент ( они анализируются из входных строк типа «0: 00: 10: 520»).

tin_first, tin_second = ins.split(".")
tin_hours, tin_minutes, tin_seconds = tin_first.split(":")
tin_usec = tin_second * 1000
tin = Time.gm(0, 1, 1, tin_hours, tin_minutes, tin_seconds, tin_usec)

То же самое происходит с tout . Затем:

tdiff = Time.at(tout-tin)

Для вывода я использую:

"00:#{tdiff.min}:#{tdiff.sec}.#{tdiff.usec}"

Есть ли более быстрый способ сделать это? Помните, я просто хочу увидеть разницу между двумя временами. Что мне не хватает?

В настоящее время я использую Ruby 1.9.3p6.

6
задан slhck 14 December 2011 в 16:53
поделиться