簡體   English   中英

ValueError:日期超出月份日期時間的范圍

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

我在編寫一些代碼時遇到了問題。 我將四個輸入(日、月和年)作為日期,以及他們想要重復任務的次數(例如,每周一持續 3 周)。 代碼很棒,但是如果幾個月之間的周數不同,我會收到此錯誤:

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

相關的部分代碼:

for i in range(0 , times):
    fulldateadd = datetime.date(year, month, day)
    cursor.execute( '''INSERT INTO dates (Date, Name, Start, End) VALUES( ?,?,?,? );''', (fulldateadd , name1, starttimehour, endtimehour))
    day = day + 7
    if day > 31:
        month = month + 1

當天數超過 31 時,我試圖增加月份,但它似乎不起作用。

增加日期時間的組件然后創建一個新的組件不是一個好主意的原因有幾個。 主要是因為您自己處理公歷並不是那么令人愉快,恕我直言,日期時間對象可以為您完成。

在這一點上,一個更直接的方法是在循環中為您的日期時間添加一個時間增量。 例如,

>>> from datetime import timedelta
>>> times = 4
>>> cur_date = datetime.date(2017, 2, 24)

>>> for _ in range(times):
        print('today is {0}, do something'.format(cur_date))
        cur_date += timedelta(days=7)

today is 2017-02-24, do something
today is 2017-03-03, do something
today is 2017-03-10, do something
today is 2017-03-17, do something

這也可以放置在生成器中,具體取決於您的用例。

>>> for dt in (cur_date + timedelta(days=x*7) for x in range(times)):
        print('today is {0}, do something'.format(dt))

today is 2017-02-24, do something
today is 2017-03-03, do something
today is 2017-03-10, do something
today is 2017-03-17, do something

或使用 Pandas pd.date_range

>>> import pandas as pd
>>> list(pd.date_range(start='2017-02-24', periods=4, freq='7D'))

[Timestamp('2017-02-24 00:00:00', freq='7D'),
 Timestamp('2017-03-03 00:00:00', freq='7D'),
 Timestamp('2017-03-10 00:00:00', freq='7D'),
 Timestamp('2017-03-17 00:00:00', freq='7D')]

現在如果你用你的方法嘗試這個例子會發生什么?

>>> year, month, day = 2017, 2, 24

>>> for i in range(0 , times):
        day = day
        fulldateadd = datetime.date(year, month, day)
        print('today is {0}, do something'.format(fulldateadd))
        day = day + 7
        if day > 31:
            day = day - 31
            month = month + 1

today is 2017-02-24, do something

ValueErrorTraceback (most recent call last)
<ipython-input-255-7df608ebbf8e> in <module>()
      1 for i in range(0 , times):
      2     day = day
----> 3     fulldateadd = datetime.date(year, month, day)
      4     print('today is {0}, do something'.format(fulldateadd))
      5     day = day + 7

ValueError: day is out of range for month

二月沒有 31 天......所以你必須包含一個檢查,並映射到每個月的天數。 包括閏年的邏輯。

暫無
暫無

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

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