Files
clientflow_backend/app/timezone_utils.py

32 lines
1.1 KiB
Python

"""Application civil-time helpers for Portuguese operators."""
from __future__ import annotations
from datetime import datetime, timezone
from typing import Any
from zoneinfo import ZoneInfo
OPERATOR_TIMEZONE = ZoneInfo("Europe/Lisbon")
def parse_operator_local_datetime(value: Any) -> datetime:
"""Interpret a form datetime as Europe/Lisbon and return the UTC instant."""
parsed = value if isinstance(value, datetime) else datetime.fromisoformat(str(value).strip())
if parsed.tzinfo is None:
parsed = parsed.replace(tzinfo=OPERATOR_TIMEZONE)
return parsed.astimezone(timezone.utc)
def to_operator_datetime(value: Any) -> datetime | None:
if not value:
return None
parsed = value if isinstance(value, datetime) else datetime.fromisoformat(str(value).replace("Z", "+00:00"))
if parsed.tzinfo is None:
parsed = parsed.replace(tzinfo=timezone.utc)
return parsed.astimezone(OPERATOR_TIMEZONE)
def format_operator_datetime(value: Any, pattern: str = "%d/%m/%Y %H:%M") -> str:
parsed = to_operator_datetime(value)
return parsed.strftime(pattern) if parsed else ""