给出的任务:我需要从当前日期(d,m,y)获取下一个日期并返回一个整数元组(日,月,年)。
这是我的代码:
def next_date(d, m, y):
if m == 12 and d == 31:
d, m, y = 1, 1, y+1
elif m == 1 or m == 3 or m == 5 or m == 7 or m == 8 or m== 10:
if d == 31:
d, m, y = 1, m+1, y
elif d > 31:
return 'No such date exist'
else:
d, m, y = d + 1, m, y
elif m== 4 or m == 6 or m == 9 or m == 11:
if d == 30:
d, m, y = 1, m+1, y
elif d > 30:
return 'No such date exist'
else:
d, m, y = d+1, m, y
elif m == 2:
if is_leap_year(y) and d == 29:
d, m, y = 1, 3, y
elif is_leap_year(y) and d == 28:
d,m,y = 29, m, y
if not is_leap_year(y):
if d == 28:
d, m, y = 1, 3, y
if d > 28:
return 'No such date exist'
else:
d, m, y = d + 1, m, y
return (d,m,y)
是否有比这更简单的代码,以至于它不会给我一个无限循环? 非常感谢。
答案 0 :(得分:1)
import datetime
def next_date(d, m, y):
given_day = datetime.date(y, m, d)
next_day = today + datetime.timedelta(days=1)
return next_day.day, next_day.month, next_day.year
一个标准的小型图书馆,让您的生活更轻松:D检查THIS。
答案 1 :(得分:1)
尝试使用Python的datetime模块:
import datetime
def next_date(d, m, y):
date = datetime.datetime(d,m,y)
date += datetime.timedelta(days=1)
return (date.day, date.month, date.year)
答案 2 :(得分:1)
如果您不允许使用库,则可以使用较短的库:
def next_date(d, m, y):
days = [31,28,31,30,31,30,31,31,30,31,30,31]
if is_leap_year(y):
days[1] = 29
if d < 1 or d > days[m-1] or m < 1 or m > 12:
return "No such date exist"
d += 1
if d > days[m-1]:
d, m = 1, m+1
if m > 12:
d, m, y = 1, 1, y+1
return (d,m,y)
您可以使用以下方法进行测试:
print next_date(10, 2, 2014)
print next_date(28, 2, 2014)
print next_date(29, 2, 2014)
print next_date(31, 12, 2014)
此外,这是一个您未实现的is_leap_year
的简单实现:
def is_leap_year(y):
return y % 4 == 0 and (y % 100 != 0 or y % 400 == 0)