84

次の変数を使用してデータベースから日付を取得しました

{{ i.operation_date }}

私は次のような値を得ました

April 1, 2013

取得できるように、上記に1年を追加する必要があります

April 1, 2014

どうすればこれを行うことができますか?

4

9 に答える 9

121

AGSM の回答python-dateutilは、パッケージを使用してこの問題を解決する便利な方法を示しています。しかし、そのパッケージをインストールしたくない場合はどうすればよいでしょうか? 次のようにバニラPythonで問題を解決できます。

from datetime import date

def add_years(d, years):
    """Return a date that's `years` years after the date (or datetime)
    object `d`. Return the same calendar date (month and day) in the
    destination year, if it exists, otherwise use the following day
    (thus changing February 29 to March 1).

    """
    try:
        return d.replace(year = d.year + years)
    except ValueError:
        return d + (date(d.year + years, 1, 1) - date(d.year, 1, 1))

他の可能性 (2 月 29 日を 2 月 28 日に変更) が必要な場合は、最後の行を次のように変更する必要があります。

        return d + (date(d.year + years, 3, 1) - date(d.year, 3, 1))
于 2013-04-01T12:56:06.770 に答える
3

これは、かなり簡潔であり、外部パッケージを使用していないことがわかったもう1つの回答です。

import datetime as dt
import calendar

# Today, in `dt.date` type
day = dt.datetime.now().date()

one_year_delta = dt.timedelta(days=366 if ((day.month >= 3 and calendar.isleap(day.year+1)) or
                                            (day.month < 3 and calendar.isleap(day.year))) else 365)

# Add one year to the current date
print(day + one_year_delta)
于 2020-09-16T20:26:38.847 に答える