24 lines
859 B
Python
24 lines
859 B
Python
import re
|
|
from datetime import date, datetime
|
|
|
|
from .types import Event
|
|
|
|
def parse_date(id: str, name: str, input: str, apple_omit_year: str | None = None) -> Event:
|
|
if isinstance(input, date):
|
|
return Event(id, name, input.day, input.month, input.year)
|
|
|
|
match = re.match(r"^(-|NaN)-(\d{2})-?(\d{2})$", input) # no-year format: --MMDD or --MM-DD. Also NaN-MM-DD spotted
|
|
if match:
|
|
return Event(id, name, int(match.group(3)), int(match.group(2)))
|
|
|
|
for fmt in ("%Y-%m-%d", "%Y%m%d"):
|
|
try:
|
|
dt = datetime.strptime(input, fmt).date()
|
|
if apple_omit_year == f"{dt.year}":
|
|
return Event(id, name, dt.day, dt.month)
|
|
else:
|
|
return Event(id, name, dt.day, dt.month, dt.year)
|
|
except ValueError:
|
|
continue
|
|
|
|
return None # cannot parse |