Python Version 3 Logo

[Python]日付や時刻の加算・減算・値の比較をする

Python では日付や時刻を加算したり減算したりすることができます。2つの日付や時刻の値の差分を取得することもできます。今回は Python での日付の加算・減算・値の比較の方法について説明したいと思います。

前提条件

  • Python : 3.9.1

timedelta クラスについて

今回の日付の加算・減算では、 Python の標準ライブラリである datetime モジュールの timedelta オブジェクトを使用します。

timedelta オブジェクトは経過時間として2つの日付や時刻の差を表します。

class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

全ての引数が任意項目で、デフォルト値は 0 です。引数の値は整数、浮動小数点数でも良く、正の値でも負の値でも設定できます。

日付の加算

日付の加算を行う場合、以下のように実装します。

import datetime

# 現在日時を取得
dt1 = datetime.datetime.now()

print(dt1)
# 2022-02-16 17:38:35.425517

# 試しに2日加算してみる
dt2 = dt1 + datetime.timedelta(days=2)

print(dt2)
# 2022-02-18 17:38:35.425517

時刻の加算

時刻の加算は以下のように実装します。

import datetime

# 現在日時を取得
dt1 = datetime.datetime.now()

print(dt1)
# 2022-02-16 17:41:16.127730

# 6時間加算
dt2 = dt1 + datetime.timedelta(hours=6)

print(dt2)
# 2022-02-16 23:41:16.127730

日付の減算

減算するには引数に負の数を設定します。

import datetime

# 現在日時を取得
dt1 = datetime.datetime.now()

print(dt1)
# 2022-02-16 17:43:36.631908

# 1日前を取得する
dt2 = dt1 + datetime.timedelta(days=-1)

print(dt2)
# 2022-02-15 17:43:36.631908

時刻の減算

import datetime

# 現在日時を取得
dt1 = datetime.datetime.now()

print(dt1)
# 2022-02-16 17:47:28.663650

# 3時間減算する
dt2 = dt1 + datetime.timedelta(hours=-3)

print(dt2)
# 2022-02-16 14:47:28.663650

日付の比較

以下のように実装すると日付の差分が求められます。

import datetime

dt1 = datetime.date(2022,1,1)

print(dt1)
# 2022-01-01

dt2 = datetime.date(2022,2,1)

print(dt2)
# 2022-02-01

diff = dt2 - dt1

print(diff)
# 31 days, 0:00:00

diff = dt1 - dt2

print(diff)
# -31 days, 0:00:00

datetime モジュールの date オブジェクトではなく、 datetime オブジェクトを使用すると時刻の差分まで取得することができます。
大小比較もできます。

print(dt1 < dt2)
# True

print(dt1 > dt2)
# False

このように値の比較を行うことができます。
ちなみに、「 diff = dt2 - dt1 」みたいに演算した結果も timedelta 型のインスタンスとして取得できるので、日にちだけとか時間だけを取得することもできます。

print(diff.days)
# -31

timedelta 型のインスタンスとしてデータを取得できたとしても、 datetime モジュールの date オブジェクトを使用した場合は、 timedelta 型のインスタンスの hours などを取得しようとするとエラーになりますので要注意です。

print(diff.hours)

# AttributeError: 'datetime.timedelta' object has no attribute 'hours'

最後に

日付を演算した後にどのようなデータ型になっているのかをしっかり把握しておかないと、予期せぬ不具合を引き起こす原因ともなりますので、日付の加算・減算や値の比較方法をしっかり覚えておきたいですね。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です