概要
dateutil
ライブラリのrelativedelta
を使うことで、特定の日付と今日の日付の間の年数の差を計算することができます。サンプルコードを使って紹介します。
サンプルコード
relativedelta
は基本的に以下のように使用してその差分を出すことができます。
relativedelta(datetime1, datetime2)
ドキュメントはこちら。
以下にサンプルコードを作ってみました。
from dateutil.relativedelta import relativedelta
from datetime import date
year = 2020
month = 12
day = 1
base_date: date = date(year, month, day)
print(f'base_date: {base_date}')
today: date = date.today()
print(f'today: {today}')
date_difference: relativedelta = relativedelta(today, base_date)
print(f'date_difference: {date_difference}')
print(f'date_difference.years: {date_difference.years}')
# 出力結果
# base_date: 2020-12-01
# today: 2024-10-25
# date_difference: relativedelta(years=+3, months=+10, days=+24)
# date_difference.years: 3
上記の通り、とてもわかりやすいです。
relativedelta
を使用して、today
とbase_date
の日付の差を計算し、date_difference
に格納しています。今回は日にち一日指定
このdiff
オブジェクトには、years
、months
、days
の属性があります。(他にもHours
、Minutes
、Seconds
、Microseconds
がありますが、設定していない場合は無視される)。
年数の差だけを表示したい場合は、date_difference.years
とすればOKです。
年だけでなく月の差も出したい場合は、こんな方法もあります。
# yearsとmonthsの合計を計算
years_plus_month = round(date_difference.years + date_difference.months / 12, 1)
print(f'years_plus_month: {years_plus_month}')
# years_plus_month: 3.8
date_difference.years
にdate_difference.months
を12で割った値を加算してあげることで、ポイントのような数値に変換しています。その後、round
関数を使用して、小数点以下1桁で四捨五入してあげてます。
他にもこんな使い方もできます。
以下では、年を挟んだ1ヶ月後の月日が取得できます。
one_month_later = datetime(2020, 12, 1) + relativedelta(months=1)
print(one_month_later)
# 出力結果
# 2021-01-01 00:00:00
datetime
だけだと調整が面倒になりますので、こういった使い方は有用ですね。