我无法获得变量的日期
问题描述:
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)
我得到Integer要求。否则,我得到一个不同的错误我无法获得变量的日期
TypeError: get_next_monday() takes exactly 3 arguments (1 given)
答
您的代码中有一些小问题。这里的修正和解释:
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(2016, 6, 10)
或get_next_monday('2016', '6', '10')
被调用get_next_monday
。
创建datetime对象没有多少意义,将它转换为字符串,然后是列表,最后重新转换为日期时间对象。
不管怎样,我希望它帮你:)
答
你传入一个字符串值,您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")
。
我是否缺少一个问题? – Jasper
看起来你正在向'get_next_monday'函数传递一个字符串,但它期望3个单独的参数 - 不是一个字符串。 – Lix