我无法使用变量获取日期

时间:2016-06-28 10:12:32

标签: python date integer

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

2 个答案:

答案 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_mondayget_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")