>>> import datetime
>>> today = datetime.date.today()
>>> date = datetime.date(today.year, 7, 14)
>>> delta = date - today
>>> delta.days
# 70
# функция `timedelta_to_dhms()` создана выше
# в подразделе Форматирование вывода
>>> days, hours, minutes, _ = timedelta_to_dhms(delta)
>>> print(f'{days} days, {hours} hours, {minutes} minutes')
69 days, 0 hours, 0 minutes
Подсчет прошедших и предстоящих дат.
Узнаем дату "дня программиста". Как известно, день программиста приходится на 256 день в году.
>>> import datetime
# текущая дата, из который нужно вытащить год
today = datetime.date.today()
# дата начала года
>>> first_day_year = datetime.date(today.year, 1, 1)
# разница в 256 дней
>>> delta = datetime.timedelta(days=256)
>>> prog_day = first_day_year + delta
>>> print(f'{prog_day.day}.{prog_day.month}.{prog_day.year}')
# 14.9.2022
Использование месяца, при расчете интервала timedelta.
В конструкторе объекта datetime.timedelta() нет аргумента, отвечающего за месяц, следовательно его надо рассчитывать. Как тогда точно рассчитать количество дней в нескольких месяцах, если количество дней в месяцах разное? А если расчеты выпадут на февраль и да еще год високосный?
Для подсчета дней в месяцах можно воспользоваться функцией calendar.monthrange() встроенного модуля calendar. Рассчитаем дату, которая будет через 3 месяца и 6 дней от текущей:
import datetime, calendar, locale
# переменные для расчета даты
# через 3 месяца и 6 дней
month = 3
day = 6
# текущая дата
today = datetime.date.today()
# расчет количества дней в 3-х месяцах
sum_mont = 0
for i in range(today.month, today.month+month):
_, month_days = calendar.monthrange(today.year, i)
sum_mont += month_days
# количество дней до назначенной даты
total_days = sum_mont + day
# рассчитываем дельту
delta = datetime.timedelta(days=total_days)
# вычисляем дату
deadline = today + delta
print(f'{deadline.day}.{deadline.month}.{deadline.year}')
# номер дня недели (0-понедельник)
n_weekday = calendar.weekday(deadline.year, deadline.month, deadline.day)
print(f'Номер дня недели => {n_weekday}')
#выбираем русскую локаль, если нужны
# названия дней недели в кириллице
locale.setlocale(locale.LC_ALL, 'ru_RU.UTF-8')
# название дня недели
day_name = calendar.day_name[n_weekday]
print(f'Название дня недели => {day_name}')
# сокращенное название дня недели
day_abbr = calendar.day_abbr[n_weekday]
print(f'Сокращенное название дня недели => {day_abbr}')
# 17.5.2022
# Номер дня недели => 1
# Название дня недели => Вторник
# Сокращенное название дня недели => Вт