EmailBot/timezone_utils.py

41 lines
1.5 KiB
Python

# 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