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)