from typing import Union from datetime import datetime, date, timedelta def round_to_end_of_day(dt: Union[datetime, date]) -> datetime: if isinstance(dt, date) and not isinstance(dt, datetime): dt = datetime.combine(dt, datetime.min.time()) return (dt + timedelta(days=1)).replace(hour=0, minute=0, second=0, microsecond=0) def round_to_start_of_day(dt: Union[datetime, date]) -> datetime: if isinstance(dt, date) and not isinstance(dt, datetime): dt = datetime.combine(dt, datetime.min.time()) return dt.replace(hour=0, minute=0, second=0, microsecond=0)