1. ホーム
  2. パイソン

[解決済み】ライブラリを使わずにpythonでdatetimeをカスタム月単位でインクリメントする方法【重複あり

2022-04-02 17:28:45

質問

datetime 値の月をインクリメントする必要があります。

next_month = datetime.datetime(mydate.year, mydate.month+1, 1)

月が12のとき、13になり、エラー "月は1..12"が発生します。(年がインクリメントされると思ったのですが)

timedeltaを使いたかったのですが、monthの引数を取らないのです。 そこで リラティブデルタ pythonパッケージですが、このためだけにインストールするのはちょっと...。 また ストロートタイム .

time = strtotime(str(mydate));
next_month = date("Y-m-d", strtotime("+1 month", time));

datetimeからstr、そしてtime、さらにdatetimeへの変換はしたくないので、やはりこれもライブラリです

どなたか良い、そして シンプル タイムデルタを使用するような解決策を教えてください。

どのように解決するのですか?

編集 - 翌月の日数が少ない場合、日付の切り捨てが必要とのご意見を踏まえ、解決策をご紹介します。

import datetime
import calendar

def add_months(sourcedate, months):
    month = sourcedate.month - 1 + months
    year = sourcedate.year + month // 12
    month = month % 12 + 1
    day = min(sourcedate.day, calendar.monthrange(year,month)[1])
    return datetime.date(year, month, day)

使用中です。

>>> somedate = datetime.date.today()
>>> somedate
datetime.date(2010, 11, 9)
>>> add_months(somedate,1)
datetime.date(2010, 12, 9)
>>> add_months(somedate,23)
datetime.date(2012, 10, 9)
>>> otherdate = datetime.date(2010,10,31)
>>> add_months(otherdate,1)
datetime.date(2010, 11, 30)

また、時間、分、秒にこだわらないのであれば date よりも datetime . もし、時間、分、秒を気にするのであれば、私のコードを修正する必要があります。 datetime で、時間、分、秒をソースから結果にコピーします。