def get_next_monday(year, month, day):
date0 = datetime.date(year, month, day)
next_monday = date0 + datetime.timedelta(7 - date0.weekday() or 7)
return next_monday
date2 = datetime.datetime.now().strftime("%Y, %m, %d")
findnextweek = get_next_monday(date2)
如果我用(year, month, day)
替换(date2)
,我需要整数。否则,我得到一个不同的错误
TypeError:get_next_monday()只需要3个参数(给定1个)
答案 0 :(得分:2)
您的代码中存在一些小问题。以下是修复和解释:
import datetime
def get_next_monday(year, month, day):
# if you want to accept str and int, you must convert the strings
date0 = datetime.date(int(year), int(month), int(day))
next_monday = date0 + datetime.timedelta(7 - date0.weekday() or 7)
return next_monday
# you must convert the date in a list, because `get_next_monday` takes 3 arguments.
initial_date = datetime.datetime.now().strftime("%Y, %m, %d").split(',')
# you must un-pack the date
findnextweek = get_next_monday(*initial_date)
print(findnextweek)
请注意,通常您应使用get_next_monday
或get_next_monday(2016, 6, 10)
等方式致电get_next_monday('2016', '6', '10')
。
没有太多意义来创建datetime对象,将其转换为字符串,然后是列表,最后重新转换为datetime对象。
无论如何,我希望它可以帮助你:)。
答案 1 :(得分:1)
您正在将字符串值传递给get_next_monday
函数,但它需要3个参数。
date2 = datetime.datetime.now().strftime("%Y, %m, %d")
这将返回与此类似的字符串:'2016, 06, 28'
。
您需要将该字符串拆分为3个变量,以便将其传递给您的函数。
有很多方法可以做到这一点,但我会提供一个超级简单的选项:
year, month, day = date2.split(',')
这将填充year
与“2016”,月份为“06”,日期为“28”。然后,您可以将这三个变量传递给get_next_monday
函数。在将参数传递给date
函数之前,不要忘记将参数转换为数字:
datetime.date( int(year), int(month), int(day) )
如您所见,split function将字符串作为输入并将字符串“分解”为部分。它会在每次看到“,”字符时“中断”字符串,因为这是我们传递给split
函数的参数。在我们的示例中,字符串仍然包含一些空格 - 您可以使用strip()
删除它们,或者您可以将日期格式更改为不包含空格:strftime("%Y,%m,%d")
。