2016-06-28 71 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")