2016-06-28 70 views
0
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)

+1

我是否缺少一个问题? – Jasper

+0

看起来你正在向'get_next_monday'函数传递一个字符串,但它期望3个单独的参数 - 不是一个字符串。 – Lix

回答

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(2016, 6, 10)get_next_monday('2016', '6', '10')被调用get_next_monday

创建datetime对象没有多少意义,将它转换为字符串,然后是列表,最后重新转换为日期时间对象。

不管怎样,我希望它帮你:)

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")