def isLeapYear(year): return year % 400 == 0 if year % 100 == 0 else year % 4 == 0 def monthDays(year, month): assert month > 0 MONTHDAYS = (0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) days = MONTHDAYS[month] return days + 1 if (isLeapYear(year) and month == 2) else days def nextDay(year, month, day): if not dateIsValid(year, month, day): return # Verifica se é o último dia do ano if (month, day) == (12, 31): year += 1 month = 1 day = 1 # Verifica se é o último dia do mês elif (monthDays(year, month) == day): month += 1 day = 1 # Dia comum else: day += 1 return year, month, day def dateIsValid(year, month, day): return False if (month > 12 or month <= 0) or (day > monthDays(year, month) or day <= 0) else True def previousDay(year, month, day): if not dateIsValid(year, month, day): return # Primeiro dia do ano if (month, day) == (1, 1): year -= 1 month = 12 day = 31 # Primeiro dia do mês (sem ser janeiro) elif day == 1: day = monthDays(year, month - 1) month -= 1 # Dia comum else: day -= 1 return year, month, day