from datetime import datetime, timezone from zoneinfo import ZoneInfo def utc_now() -> datetime: return datetime.now(timezone.utc) def to_utc_iso(value: datetime) -> str: return value.astimezone(timezone.utc).isoformat(timespec="seconds") def parse_utc_iso(value: str) -> datetime: parsed = datetime.fromisoformat(value) if parsed.tzinfo is None: return parsed.replace(tzinfo=timezone.utc) return parsed.astimezone(timezone.utc) def format_local_dt(value: str | datetime, tz: ZoneInfo) -> str: parsed = parse_utc_iso(value) if isinstance(value, str) else value return parsed.astimezone(tz).strftime("%Y-%m-%d %H:%M")