2017-03-08 3 views
0

私は、ユーザーが自分の持つ日時を書き留めるコードを書いています。開始日、開始時刻、終了時刻が入ります。また、ユーザーが複数の週に渡るかどうかを指定することもできます(例えば、毎週月曜日に月曜日など) 私はこれを行うためにforループを使用しています。たとえば、次の月曜日が翌月にある場合)、正しい日付になります。ValueError:日がPythonの月の範囲外です

これは私のコードです:

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 

を? (?dayは、monthyear、およびtimesから来るのかたとえば、のために)

+0

あなたの[前の質問](http://stackoverflow.com/questions/42673459/valueerror-day-is-out-of-range-for-month-datetime)のコメント投稿者と同様に、 'timedelta'](https://docs.python.org/3/library/datetime.html#datetime.timedelta)を使って' datetime'オブジェクトに時間を追加します。それで、あなたは月の境界について全く心配する必要はありません。 – glibdud

+0

@glibdud私は、日々のことに本当に慣れていません。私はそれが何をするのが好きですが、私はそれを実装する良い方法を知らない。 – simons21

答えて

1

これは、前のコードの一部を見ることなく、完全に正確であることが難しいのですが、ここでは、あなたのコード内でtimedeltaを使用することができるかもしれない方法は次のとおりです。

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

timedeltaインスタンスではなく、特定の絶対時間よりも、時間を表します。デフォルトでは、コンストラクタに渡される単一の整数は日数を表します。したがって、timedelta(7)は、7日間を表すオブジェクトを提供します。

timedeltaインスタンスは、基本演算を使用してdatetimeまたはdateインスタンスで使用できます。たとえば、date(2016, 12, 31) + timedelta(1)は特別な操作を行うことなく、date(2017, 1, 1)となります。

+0

完璧な説明と答え。ありがとうございます:)私はこれが尋ねる場所ではないことを知っていますが、あなたが他のいくつかの問題を助けることができるかどうかを尋ねることができますか? – simons21

関連する問題