2016-06-28 4 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)に置き換えると、整数が必要になります。それ以外の場合、別のエラーが発生する変数を使用して日付を取得できません

TypeError: get_next_monday() takes exactly 3 arguments (1 given)

+1

質問がありませんか? – Jasper

+0

文字列を 'get_next_monday'関数に渡しているようですが、文字列ではなく3つの個別のパラメータが必要です。 – Lix

答えて

2

コードには少し問題があります。通常、あなたがget_next_monday(2016, 6, 10)またはget_next_monday('2016', '6', '10')ようなものでget_next_mondayを呼び出すべきである

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) 

注:ここでの修正と説明があります。

datetimeオブジェクトを作成し、文字列に変換してからリストに変換し、最後にdatetimeオブジェクトに再変換することはあまり意味がありません。

とにかく私はそれはあなたを助ける願っています:)

1

あなたのget_next_monday関数に文字列値を渡しているが、それは3つの引数を期待しています。

date2 = datetime.datetime.now().strftime("%Y, %m, %d") 

これは、'2016, 06, 28'のような文字列を返します。 あなたの関数に渡すために、その文字列を3つの変数に分割したいと思うでしょう。

は、これを行うには多くの方法がありますが、私はスーパーシンプルなオプションを提供します:

year, month, day = date2.split(',') 

これは「28」と「2016」、「06」と月と日とyearを移入します。これらの3つの変数をget_next_monday関数に渡すことができます。 date関数に渡す前に数字に引数を変換することを忘れないでください:

datetime.date(int(year), int(month), int(day)) 

あなたが見ることができるように、split functionを入力し、「休憩」までの部分に文字列として文字列を取ります。 "、"文字が表示されるたびに文字列を "中断"します。これは、それがsplit関数に渡す引数であるためです。この例では、文字列には空白が含まれています.strip()を使用して削除するか、空白を含まないように日付書式を変更することができます(strftime("%Y,%m,%d"))。

関連する問題