from datetime import datetime, timezone def normalize_datetime_utc(dt: datetime | None) -> datetime | None: """Normalize datetime values to UTC. Naive datetimes are interpreted as UTC to match SQLite storage behavior. """ if dt is None: return None if dt.tzinfo is None or dt.tzinfo.utcoffset(dt) is None: return dt.replace(tzinfo=timezone.utc) return dt.astimezone(timezone.utc) def to_utc_isoformat(dt: datetime | None) -> str | None: normalized = normalize_datetime_utc(dt) if normalized is None: return None return normalized.isoformat() def to_utc_timestamp(dt: datetime | None) -> float | None: normalized = normalize_datetime_utc(dt) if normalized is None: return None return normalized.timestamp()