プログラミング

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

プログラミング
この記事は約4分で読めます。
スポンサーリンク

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

スポンサーリンク

前提条件

  • Python:3.9.1

timedeltaクラスについて

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

datetime --- 基本的な日付型および時間型 — Python 3.9.4 ドキュメント

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'

最後に

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

スポンサーリンク
スポンサーリンク
スポンサーリンク
KoEをフォローする
CodeLab

コメント

タイトルとURLをコピーしました