27 lines
744 B
Python
27 lines
744 B
Python
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")
|