ValueError:day超出了月python的范围

时间:2017-03-08 16:23:46

标签: python-3.x datetime

我正在编写代码,让用户可以记下他们所拥有的日期和时间。它包括它开始的日期,开始时间和结束时间。它还允许用户指定他们是否希望将其延续到多个星期(例如,每个星期一,一个月) 我正在使用for循环来执行此操作,并且由于不同的月份有不同的日子我显然想要(如果下周一例如是在下个月),那么它具有正确的日期。

这是我的代码:

for i in range(0 , times):
    day = day
    month = month
    fulldateadd = datetime.date(year, month, day)
    day = day + 7
    if month == ( '01' or '03' or '05' or '07' or '10'or '12'):
        if day > 31:
            print(day)
            day = day - 31
            print(day)
            month = month + 1
        elif month == ( '04' or '06'or '09' or '11'):
            if day > 30:
                print(day)
                day = day - 30
                print(day)
                month = month + 1
        elif month == '02':
            if day > 29:
                print(day)
                day = day - 29
                print(day)
                month = month + 1

当运行它并进行测试以查看它是否正确进入新月份时,我收到错误:

  File "C:\Users\dansi\AppData\Local\Programs\Python\Python36-32\gui test 3.py", line 73, in addtimeslot
fulldateadd = datetime.date(year, month, day)
ValueError: day is out of range for month

我哪里出错?

1 个答案:

答案 0 :(得分:1)

如果没有看到以前的某些代码(例如daymonthyeartimes来自哪里?),那么很难完全准确?) ,但是您可以在代码中使用timedelta

fulldateadd = datetime.date(year, month, day)
for i in range(times):
    fulldateadd = fulldateadd + datetime.timedelta(7)

timedelta实例表示一段时间,而不是特定的绝对时间。默认情况下,传递给构造函数的单个整数表示天数。因此,timedelta(7)会为您提供一个代表7天的对象。

然后,

timedelta个实例可以使用基本算法与datetimedate个实例一起使用。例如,date(2016, 12, 31) + timedelta(1)会在不需要做任何特殊操作的情况下为您提供date(2017, 1, 1)