2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Python】relativedeltaを利用して年数差を計算する

Posted at

概要

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を使用して、todaybase_dateの日付の差を計算し、date_differenceに格納しています。今回は日にち一日指定

このdiffオブジェクトには、yearsmonthsdaysの属性があります。(他にもHoursMinutesSecondsMicrosecondsがありますが、設定していない場合は無視される)。
年数の差だけを表示したい場合は、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.yearsdate_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だけだと調整が面倒になりますので、こういった使い方は有用ですね。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?