from __future__ import annotations import datetime as dt from dateutil import parser as date_parser def parse_datetime(value: str | None) -> dt.datetime | None: if not value: return None try: return date_parser.parse(value) except (TypeError, ValueError, OverflowError): try: return date_parser.parse(value, fuzzy=True) except (TypeError, ValueError, OverflowError): return None def normalize_date(value: str | None) -> str: parsed = parse_datetime(value) if parsed is None: return "" if parsed.tzinfo is None or parsed.utcoffset() is None: return parsed.strftime("%Y-%m-%d %H:%M:%S") return parsed.isoformat(sep=" ", timespec="seconds")