timedelta - разнице между двумя точками во времени.Решим простую задачу, сколько секунд прошло между двумя датами. Для простоты возьмём сегодняшнее число и время с интервалом в один час.
Вначале у нас всё хорошо.
from datetime import datetime
dt_gt = datetime(2024, 10, 10, 11, 11)
dt_lt = datetime(2024, 10, 10, 10, 11)
td = dt_gt - dt_lt
print(f'<{dt_gt}> - <{dt_lt}> = <{td}>')
print(f'{td.seconds = }')
# Результат
# <2024-10-10 11:11:00> - <2024-10-10 10:11:00> = <1:00:00>
# td.seconds = 3600
Из большего значения (более поздней даты) вычитаем меньшее значение. И получаем ожидаемую разницу в один час -
1:00:00.У timedelta есть удобное свойство, seconds. Оно вернуло 3600 секунд.
Познавательная минутка 🤓
В одном часе 60 минут.
В одной минуте 60 секунд.
Следовательно в одном часе 60 × 60 = 3600 секунд.
А ещё в сутках 24 часа или 86400 секунд. Эти знания нам пригодятся после второго примера.
А теперь поменяем местами даты.
from datetime import datetime
dt_gt = datetime(2024, 10, 10, 11, 11)
dt_lt = datetime(2024, 10, 10, 10, 11)
td = dt_lt - dt_gt
print(f'<{dt_lt}> - <{dt_gt}> = <{td}>')
print(f'{td.seconds = }')
# Результат
# <2024-10-10 10:11:00> - <2024-10-10 11:11:00> = <-1 day, 23:00:00>
# td.seconds = 82800
Ранее мы убедились, что между датами 1 час или 3600 секунд. Но timedelta сообщает о разнице в 82800 секунд. 😨
Если присмотреться, timedelta теперь минус один день и плюс 23 часа.
Считаем -1 день = -24 часа.
-24 + 23 = -1 час или -3600 секунд.
Получается, что разница во времени посчитана верно. Но ожидаемы -3600 секунд мы не получили.
Что делать? 🤔 Смотреть пример 3.
from datetime import datetime
dt_gt = datetime(2024, 10, 10, 11, 11)
dt_lt = datetime(2024, 10, 10, 10, 11)
td = dt_lt - dt_gt
print(f'<{dt_lt}> - <{dt_gt}> = <{td}>')
print(f'{td.total_seconds() = }')
# Результат
# <2024-10-10 10:11:00> - <2024-10-10 11:11:00> = <-1 day, 23:00:00>
# td.total_seconds() = -3600.0
У объекта timedelta есть метод total_second. Он и вернул ожидаемые -3600 секунд. 🥳
Познавательная минутка 🤓
Доступ к свойству объекта осуществляется через точку.
объект.свойствоДоступ к методу объекта осуществляется путём вызова метода, через имя и круглые скобки.
объект.метод()Всем отличного времени, какая бы разница у него не была. ⏳
✍️ - беру на вооружение
🤯 - как это работает?
#познавательно #python