python 2つの日付の期間を年単位で求める方法

 最初は、(dateB - dateA).years などと書くことで、簡単に計算できないかと、色々調べてみましたが、timedelta には .days というプロパティはあっても、.years というプロパティはないんですよね。

 結局、次のように簡単な関数を自作することで、解決。

 書いてみれば、簡単な話なんだけど、、、すぐには思い至らない、自分のような人が他にもいると思うので、ご参考まで。

画像1

import datetime

dateA = datetime.datetime(2010,10,1)
dateB = datetime.datetime(2012,4,1)

def diff_years(dateX, dateY):
       diff_year = dateY.year - dateX.year
       newdateX = datetime.datetime(dateY.year, dateX.month, dateX.day)
       diff_days = (dateY - newdateX).days
       diff_year = round(diff_year + diff_days/365,2)
       return diff_year

図で描くと、こんな感じの計算。

2020年03月27日07時57分24秒_0001

 まず、dateB の 年(2012)から、dateAの年(2010)を引くことで、とりあえず、年単位での差が2 であることを求めている。

 次に、dateBの年、dateAの月・日を組み合わせた日付を作る。

つまり、2012/10/1 という日付を作る。これが newdateXね。

 2012/4/1 - 2012/10/1 を計算すると、-183 となる。

 2 + (-183/2) ≒ 1.5 ということで、dateAからdateB まで、何年間になるかが計算できる。

 どなたかのお役に立てば幸いです。

この記事が気に入ったらサポートをしてみませんか?