Вы можете избежать странного разбора партирования getchas (переход на летнее время, запуск кода около полуночи), просто выполнив математику по часам и минутам вместо того, чтобы разбирать их на объекты Time
. Что-то вдоль этих линий (я бы проверить математику с тестами):
one = "8:15"
two = "7:45"
h1, m1 = one.split(":").map(&:to_i)
h2, m2 = two.split(":").map(&:to_i)
puts (h1 - h2) * 60 + m1 - m2
Если вы хотите принять Daylight Saving во внимание (например, вы иногда хотите добавлен дополнительный час или вычитаться в зависимости от текущей даты), то вам конечно, нужно будет задействовать Time
.
Как временный код паранойи, здесь есть некоторые ошибки, которые нужно знать: этот код не будет работать через границы дня, например. 00:01 - 23:59. Он может выйти из строя, если код запускается в полночь - он может анализировать первый раз в последнюю миллисекунду понедельника и второй раз, например, во время первой миллисекунды вторника. Вероятно, это проявит странное поведение в некоторых временных диапазонах в дни, когда изменяется переход на летнее время. –