簡體   English   中英

ValueError:日期超出月份python的范圍

[英]ValueError: day is out of range for month python

我正在編寫代碼,使用戶可以寫下他們所擁有的東西的日期和時間。 它包含開始日期,開始時間和結束時間。 它還允許用戶指定是否要延續幾個星期(例如每個月的每個星期一),我正在使用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

我哪里出問題了?

如果沒有看到一些先前的代碼(例如, 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) date(2016, 12, 31) + timedelta(1) date(2017, 1, 1)而您無需執行任何特殊操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM