from datetime import datetime class TimeSlot(): def __init__(self, name: str, start: datetime = datetime.now(), end: datetime = None): self.name = name self.start = start if end: self.end = end self._creation_time = datetime.now().timestamp() @property def name(self): return self._name @name.setter def name(self, n: str): self._name = n @property def start(self): return datetime.fromtimestamp(self._start) @start.setter def start(self, d: datetime): _d = d.replace(second=0, microsecond=0) self._start = _d.timestamp() @property def end(self): if "_end" in self.__dict__: return datetime.fromtimestamp(self._end) return None @end.setter def end(self, d: datetime): _d = d.replace(second=0, microsecond=0) if _d < self.start: raise ValueError("End date must be after the start date.") self._end = _d.timestamp() def end_now(self): self.end = datetime.now() def duration(self) -> datetime.timedelta: end = self.end if not end: end = datetime.now() return self.end - self.start