примечание в вашем вопросе говорит о TimeDifference, а не об объекте Time.
Я думаю, вам следует смоделировать TimeDifference как десятичное или плавающее поле в БД, со значением, равным разнице во времени в секундах ... и затем, когда вы распечатываете, вы можете переформатировать его как Дни , Часы, минуты.
Обратите внимание, что вот как вычитание объектов Time работает в Ruby:
> t1 = Time.now
=> 2011-11-22 20:54:54 -0800
> t2 = Time.now.tomorrow
=> 2011-11-23 20:54:59 -0800
> t2 - t1
=> 86404.928009862 # these are seconds! just store this in a float or decimal field
> (t2 - t1).class
=> Float # NOT a Time object
Попытка сохранить разницу во времени в объекте Time или поле DB времени кажется неправильной.
Если вы получаете странные входные значения из внешнего источника, такие как «26:12» , лучше преобразовать их в секунды:
hours,minutes = "26:12".split(/:/).map(&:to_i)
seconds = hours * 3600 + minutes * 60
... и затем сохранить разницу во времени в секундах
Ух ты, это из Google API ?? YIKES !!!
Тем не менее, не храните его в объекте Time.
вы можете использовать divmod () для очистки:
tomorrow,real_hour = hour.divmod(24)
где «завтра» хранит количество дней в будущем, а «реальный час» является допустимым значением для 24-часовых часов.
Как насчет создания отдельного класса "TripTime" для тех времен запуска и остановки, которые имеют свои собственные атрибуты: часы, минуты, дни? Авиакомпании обычно показывают время прилета как «03:12 +1», что означает +1 день в будущем.
... или сохраните только эти странные значения в виде строки , которая сохраняет порядок сортировки, и для вычисления разницы в часах / минутах / секундах вы можете затем преобразовать их по мере необходимости, как показано выше с split
и map