Как получить дату за три дня до праздников
С помощью библиотеки holidays я получила все государственные праздники.
ru_holidays = holidays.country_holidays('RU')
for ptr in holidays.RU(years=2022).items():
print(ptr)
Формат вывода даты:
(datetime.date(2022, 1, 1), 'Новый год')
(datetime.date(2022, 1, 2), 'Новый год')
Теперь нужно получить дату за три дня до каждого праздника. Я пыталась получить дату праздников из вывода с помощью datetime.date, чтобы потом сравнить с datetime.now, но тогда выводится не дата, а информация об объекте типа datetime. Как мне можно это сделать?
Ответы (1 шт):
Автор решения: Alpensin
→ Ссылка
Как-то так:
import holidays
from datetime import timedelta, date
BEFORE_HOLIDAYS_DELTA_DAYS = 3
CURRENT_YEAR = 2022
ru_holidays = holidays.country_holidays("RU")
before_holidays_delta = timedelta(days=BEFORE_HOLIDAYS_DELTA_DAYS)
holidays_base = holidays.RU(years=CURRENT_YEAR).items()
holiday_start_date_base = dict()
upper_date = date(year=CURRENT_YEAR + 1, month=1, day=1)
for holiday_date, holiday_name in holidays_base:
current_holiday_start_date = holiday_start_date_base.get(holiday_name, upper_date)
if holiday_date < current_holiday_start_date:
holiday_start_date_base[holiday_name] = holiday_date
for holiday_name, holiday_date_start in holiday_start_date_base.items():
date_before_holiday = holiday_date_start - before_holidays_delta
print(
f"{holiday_name} - Дата перед праздником: {date_before_holiday}, "
f"Дата начала праздника: {holiday_date_start}"
)
Результаты:
Новый год - Дата перед праздником: 2021-12-29, Дата начала праздника: 2022-01-01
Православное Рождество - Дата перед праздником: 2022-01-04, Дата начала праздника: 2022-01-07
День защитника отечества - Дата перед праздником: 2022-02-20, Дата начала праздника: 2022-02-23
День женщин - Дата перед праздником: 2022-03-05, Дата начала праздника: 2022-03-08
Праздник Весны и Труда - Дата перед праздником: 2022-04-28, Дата начала праздника: 2022-05-01
День Победы - Дата перед праздником: 2022-05-06, Дата начала праздника: 2022-05-09
День России - Дата перед праздником: 2022-06-09, Дата начала праздника: 2022-06-12
День народного единства - Дата перед праздником: 2022-11-01, Дата начала праздника: 2022-11-04