123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- from dataclasses import dataclass
- from datetime import datetime, timedelta
- import pytz
- timezone = pytz.timezone("Europe/Moscow")
- def is_actual_date(event_date: datetime) -> bool:
- """Проверяет, прошла ли уже дата"""
- now = datetime.now(timezone)
- return event_date.timestamp() > now.timestamp()
- def get_now_datetime_str() -> str:
- """Возвращает сегодняшний datetime с учётом времненной зоны."""
- now = datetime.now(timezone)
- return datetime2date_string(now)
- def parse_datetime_string(date_str: str, time_str: str) -> datetime:
- """
- Парсит строку с датой и временем и возвращает объект datetime
- """
- date_str = date_str.replace("/", "-").replace("\\", "").replace(".", "-")
- try:
- return datetime.strptime(
- f"{date_str} {time_str}", '%d-%m-%y %H:%M')
- except ValueError:
- raise ValueError("Вы ввели дату в неправильном формате\. \
- Попробуйте снова\. Дата: 12\-02\-22, 12\.02\.22 или 12/02/22\. Время: 22:22")
- @dataclass
- class NotificationDates:
- befor_day: str
- befor_4hours: str
- befor_5mins: str
-
- def compute_notification_dates(event_date: datetime):
- """
- По дате события рассчитывает даты напоминаний и возвращает их
- """
- befor_day = event_date - timedelta(days=1)
- befor_4hours = event_date - timedelta(hours=4)
- befor_5mins = event_date - timedelta(minutes=5)
- return NotificationDates(
- datetime2date_string(befor_day),
- datetime2date_string(befor_4hours),
- datetime2date_string(befor_5mins)
- )
- def datetime2date_string(date_time: datetime) -> str:
- """
- Преобразует объект datetime в строку нужного формата без секунд
- """
- return date_time.strftime("%Y-%m-%d %H:%M")
|