подсчёт временного промежутка в часах, datetime

Всем добрый день! У меня проблема: мне нужно рассчитать временной промежуток в часах с помощью datetime. Грубо говоря: есть два объекта datetime.datetime, один из них datetime.datetime.now(). Мне нужно рассчитать временной промежуток в часах, то есть 2 дня и 2 часа - 50 часов

last = datetime.datetime(year=1921, month=2, day=21)
now = datetime.datetime.now()
strmin = str(now-last)
if "," in strmin:
    time_ = strmin.split(" ")[2].split(".")[0]
else:
    time_ = strmin.split(".")[0]
hour = int(time_.split(":")[0])

этот код в теории рабочий, но в пределах одних суток. Подскажите пожалуйста, есть ли какая-либо встроенная возможность без лишних усложнений* это сделать?

.*- без выделения в строку и split()


Ответы (2 шт):

Автор решения: Amgarak

from datetime import datetime

last = datetime(year=2024, month=6, day=28)
now = datetime.now()

delta = now - last

total_minutes = delta.total_seconds() // 60
hours = int(total_minutes // 60)
minutes = int(total_minutes % 60)

print(f"{hours}:{minutes:02d}")

Вывод:

46:01

[Program finished]
→ Ссылка
Автор решения: Artyom Zaborschicov

Решение с минимальным количеством усложнений:

def timedelta2hours(delta):
    return delta.days * 24 + delta.seconds / 3600

print(timedelta2hours(now - last))

Функция возвращает абсолютное количество часов, без округления, при надобности округления вниз можно просто заменить обычное деление на целочисленное.

Думаю, такое решение максимально подоходит под вашу задачу.

UPD

Хочу добавить другое решение, которое вдохновлено коментарием к моему ответу:

def timedelta2hours(delta):
    return delta.total_seconds() / 3600

print(timedelta2hours(now - last))
→ Ссылка