# timezone_utils.py from datetime import datetime, timedelta import pytz # Часовой пояс Екатеринбурга (UTC+5) TARGET_TIMEZONE = "Asia/Yekaterinburg" def get_current_time(): """Возвращает текущее время в Екатеринбурге""" tz = pytz.timezone(TARGET_TIMEZONE) return datetime.now(tz) def format_time(dt: datetime = None, format_str: str = "%Y-%m-%d %H:%M:%S"): """Форматирует время для вывода""" if dt is None: dt = get_current_time() return dt.strftime(format_str) def parse_time_to_utc(dt: datetime): """Преобразует локальное время (Екатеринбург) в UTC для хранения в БД""" if dt.tzinfo is None: # Если время без часового пояса, добавляем Екатеринбург tz = pytz.timezone(TARGET_TIMEZONE) dt = tz.localize(dt) return dt.astimezone(pytz.UTC) def parse_time_from_utc(utc_time_str: str): """Преобразует UTC строку из БД в время Екатеринбурга""" if not utc_time_str: return None try: # Парсим UTC время utc_time = datetime.fromisoformat(utc_time_str) if utc_time.tzinfo is None: utc_time = pytz.UTC.localize(utc_time) # Конвертируем в Екатеринбург tz = pytz.timezone(TARGET_TIMEZONE) return utc_time.astimezone(tz) except Exception: return None