Загрузка данных


import re

class Date:
    def __init__(self, day, month=None, year=None):
        if isinstance(day, str) and month is None:
            parts = re.split(r'[./-]', day)
            self.day = int(parts[0])
            self.month = int(parts[1])
            y = int(parts[2])
            self.year = 2000 + y if y < 100 else y
        else:
            self.day = day
            self.month = month
            if year is not None:
                self.year = 2000 + year if year < 100 else year
            else:
                self.year = 0
        self.update_date_str()

    @staticmethod
    def from_str(date_str):
        parts = re.split(r'[./-]', date_str)
        day, month, year = map(int, parts)
        return Date(day, month, year)

    @staticmethod
    def isleap(year):
        return (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)

    def get_day(self):
        return self.day

    def get_month(self):
        return self.month

    def get_year(self):
        return self.year

    def set_day(self, day):
        self.day = day
        self.update_date_str()

    def set_month(self, month):
        self.month = month
        self.update_date_str()

    def set_year(self, year):
        self.year = 2000 + year if year < 100 else year
        self.update_date_str()

    def update_date_str(self):
        self.date_str = "{:02d}/{:02d}/{}".format(self.day, self.month, self.year)

    def get_day_of_year(self):
        days_in_months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
        if self.isleap(self.year):
            days_in_months[1] = 29
        return sum(days_in_months[:self.month - 1]) + self.day

    def __str__(self):
        return self.date_str


class Task:
    tasklist = []

    def __init__(self, start_date, end_date, description):
        self.start = Date.from_str(start_date) if isinstance(start_date, str) else start_date
        self.end = Date.from_str(end_date) if isinstance(end_date, str) else end_date
        self.description = description
        Task.tasklist.append(self)

    def get_duration(self):
        return self.end.get_day_of_year() - self.start.get_day_of_year()

    def __str__(self):
        return "с {} по {}\n{}\n".format(self.start, self.end, self.description)