Python で日付・時間の間隔を計算してみた!!

Python の datetime モジュールを用いて色々実験してみた。
文字列から日付・時間を生成するとともに、2つの間隔(差)を計算する方法がわからなかったので、調べてみた

前提

  • Python 3.6.1
  • timedateモジュール:日付・時間の管理
  • dateutilモジュール:文字列から日付・時間へ変換

現在の日時を生成する

from datetime import

today = datetime.today()
now = datetime.now()

任意の日時を生成する

from datetime import datetime

d1 = datetime(2018, 1, 1)
d2 = datetime(2018, 2, 1, 12)
d3 = datetime(2018, 3, 1, 11, 15)
d4 = datetime(2018, 4, 1,  5, 30, 59)
d1
datetime.datetime(2018, 1, 1, 0, 0)
d2
datetime.datetime(2018, 2, 1, 12, 0)
d3
datetime.datetime(2018, 3, 1, 11, 15)
d4
datetime.datetime(2018, 4, 1, 5, 30, 59)

文字列を日付・時間に変換

datetimeモジュールのdatetime.strptime() 関数で変換できるが、あまり融通の利くものではないので、dateutilのサブモジュールparser.parser()関数を使う

from dateutil.parser import parse
parse("2017/3/16")
datetime.datetime(2017, 3, 16, 0, 0)

2つの日付・時間を比較

from datetime import datetime, date

d1 = datetime(2017, 12, 5, 8, 25, 10)
d2 = datetime(2016,  5, 11, 12, 10, 10) 

d1 == d2
False
d1 != d2
True
d1 < d2
False
d1 > d2
True

2つの日付・時間の間隔

from datetime import datetime, date

d1 = datetime(2017, 12, 5, 8, 25, 10)
d2 = datetime(2016,  5, 11, 12, 10, 10) 

d1 - d2
datetime.timedelta(572, 72900)

str(d1 - d2)
'572 days, 20:15:00'

# 年数、月数、日数…を個別に計算

from dateutil.relativedelta import relativedelta
delta = relativedelta(d1, d2)
delta
relativedelta(years=+1, months=+6, days=+23, hours=+20, minutes=+15)

delta.years
1

delta.months
6

delta.days
23