Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Date():
- def __init__(self, dmy='01.01.1900'):
- day, month, year = map(int, dmy.split('.'))
- y = range(1583, 3001)
- self.year = year if year in y else 1900
- m = range(1, 13)
- self.month = month if month in m else 1
- d = range(1, 32)
- self.day = day if day in d else 1
- self.check_valid_date()
- def check_valid_date(self):
- if self.month == 2 and self.day > 29:
- if leap(self.year):
- self.day = 29
- else:
- self.day = 28
- def str_date(date):
- '''
- Возвращает дату в виде строки в формате dd.mm.yyyy
- args - date (date) (class Date)
- return - (str)
- '''
- day = str(date.day)
- month = str(date.month)
- year = str(date.year)
- if len(day) == 1: day = '0' + day
- if len(month) == 1: month = '0' + month
- return day + '.' + month + '.' + year
- def leap(year):
- '''
- Проверка на високосный гол
- args - year (int)
- return - True/False
- '''
- leap = ((year % 400 == 0) or (year % 100 != 0)) and (year % 4 == 0)
- return leap
- def day_m(year, month):
- '''
- Кол-во дней в месяце
- args - year, month (int)
- return - count_days (int)
- '''
- if month in (4, 6, 9, 11): days = 30
- elif month in (1, 3, 5, 7, 8, 10, 12): days = 31
- else:
- days = 28
- if leap(year):
- days += 1
- return days
- def day_y(year):
- '''
- args - year (int)
- return - days (int)
- '''
- if leap(year): return 366
- else: return 365
- def tomorrow(date):
- '''
- Дата на следующий
- args - date (Date)
- return tmrw_date (Date)
- '''
- tmrw_date = date
- if date.day != day_m(date.year, date.month):
- tmrw_date.day += 1
- elif date.month != 12:
- tmrw_date.month += 1
- tmrw_date.day = 1
- else:
- tmrw_date.year += 1
- tmrw_date.month = 1
- tmrw_date.day = 1
- return tmrw_date
- def yesterday(date):
- '''
- Находит дату вчерашнего дня
- args - date (Date)
- return - ystr_date (Date)
- '''
- ystr_date = date
- if date.day != 1:
- ystr_date.day -= 1
- elif date.day == 1:
- if date.month != 1:
- ystr_date.month = date.month - 1
- ystr_date.day = day_m(ystr_date.year, ystr_date.month)
- else:
- ystr_date.year = date.year - 1
- ystr_date.month = 12
- ystr_date.day = day_m(ystr_date.year, ystr_date.month)
- return ystr_date
- def future(days, date):
- '''
- Прибавляет к начальной дате кол-во дней (days),
- возвращает новую дату
- args - days (int), date (Date)
- return - date (Date)
- '''
- for i in range(1, date.month):
- days += day_m(date.year, i)
- days += date.day
- while days > day_y(date.year):
- days -= day_y(date.year)
- date.year += 1
- date.month = 1
- while days > day_m(date.year, date.month):
- days -= day_m(date.year, date.month)
- date.month += 1
- date.day = days
- return date
- def past(days, date):
- '''
- Находить дату которая была days дней назад
- args - days (int), date (Date)
- return - date (Date)
- '''
- while days >= day_y(date.year):
- days -= day_y(date.year)
- date.year -= 1
- while days >= day_m(date.year, date.month):
- days -= day_m(date.year, date.month)
- date.month -= 1
- while days > date.day:
- date.month -= 1
- days -= date.day
- date.day = day_m(date.year, date.month)
- date.day -= days
- return date
- def latest_date(date1, date2):
- '''
- Находит позднюю дату из двух
- args - date1 (Date), date2 (Date)
- return - latest_date (Date) or 0 (int)
- '''
- if date1.year > date2.year:
- latest_date = date1
- elif date1.year < date2.year:
- latest_date = date2
- else:
- if date1.month > date2.month:
- latest_date = date1
- elif date1.month < date2.month:
- latest_date = date2
- else:
- if date1.day > date2.day:
- latest_date = date1
- elif date1.day > date2.day:
- latest_date = date2
- else:
- latest_date = 0
- return latest_date
- def days_d1_d2(date1, date2):
- '''
- Находит промежуток между двумя
- args - date1 (Date), date2(Date)
- return - days (int)
- '''
- days = 0
- latest = latest_date(date1, date2)
- if latest == 0:
- return 0
- else:
- if date1 == latest:
- early = Date(str_date(date2))
- else:
- early = Date(str_date(date1))
- days += latest.day
- while latest.month > 1:
- latest.month -= 1
- days += day_m(latest.year, latest.month)
- while latest.year > early.year:
- latest.year -= 1
- days += day_y(latest.year)
- days -= early.day
- while early.month > 1:
- early.month -= 1
- days -= day_m(early.year, early.month)
- return days
- def input_date():
- y, m, d = input().split()
- s = d + '.' + m + '.' + y
- return Date(s)
- def main():
- date = input_date()
- print(str_date(date))
- date2 = input_date()
- print(str_date(date2))
- print(days_d1_d2(date, date2))
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement