# узнаем сколько прошло с 13 января до сегодня
>>> td = datetime.datetime.now() - datetime.datetime(2020, 1, 13)
>>> days, hours, minutes, seconds = timedelta_to_dhms(td)
>>> print(f'{days} days, {hours} hours, {minutes} minutes')
# 112 days, 18 hours, 16 minutes
Узнаем сколько осталось времени до события.
# узнаем сколько часов осталось до 1 июня
>>> td = datetime.datetime(2020, 6, 1) - datetime.datetime.now()
>>> hours, minutes, seconds = timedelta_to_hms(td)
>>> print(f'{hours} hours, {minutes} minutes')
# 653 hours, 39 minutes
Пример подсчета дней до события.
>>> import datetime
>>> today = datetime.datetime.now()
>>> date = datetime.datetime(2020, 7, 14)
>>> delta = date - today
>>> delta.days
# 69
# функция `timedelta_to_dhms()` создана выше
# в подразделе Форматирование вывода
>>> days, hours, minutes, _ = timedelta_to_dhms(delta)
>>> print(f'{days} days, {hours} hours, {minutes} minutes')
69 days, 10 hours, 46 minutes
>>> 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.
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
# Название дня недели => Вторник
# Сокращенное название дня недели => Вт
В конструкторе объекта нет аргумента, отвечающего за месяц, следовательно его надо рассчитывать. Как тогда точно рассчитать количество дней в нескольких месяцах, если количество дней в месяцах разное? А если расчеты выпадут на февраль и да еще год високосный?
Для подсчета дней в месяцах можно воспользоваться функцией встроенного . Рассчитаем дату, которая будет через 3 месяца и 6 дней от текущей: