【Python】datetimeによる時間・時刻比較

【Python】datetimeによる時間・時刻比較 プログラミング

「Pythonで時間を比較したい」
「PythonでRPA用の常駐プログラムを開発している」
「18時以降は別の関数を動かしたい」

このような場合に、この記事が参考になります。
この記事では、Pythonで時間・時刻比較を行う方法を解説しています。

Pythonで時間・時刻比較を行う方法

ここでは、純粋に時間・時刻の比較だけが対象となります。
よって、タイムスタンプによる比較は対象ではありません。

また、今回はdatetimeモジュールの利用だけで対応できます。
datetimeは、Pythonの標準モジュールとなります。
そのため、別途ライブラリを追加する必要もありません。

では、まずはコードから確認しましょう。

import datetime

# 基準となる時間
base = datetime.time(13, 0, 0)

# 現在時間
dt_now = datetime.datetime.now()
now = dt_now.time()

# 比較
print(now > base)
print("[base]" + str(base))
print("[now]" + str(now))

上記プログラムを実行した時間によって、結果が異なります。

現在時刻結果
13時以前False
13時より後True

ポイントは、次の2つです。

  • time型オブジェクト同士の比較
  • datetime型オブジェクトからtime型オブジェクトの抽出

それぞれを下記で説明します。

time型オブジェクト同士の比較

time型同士であれば、不等号を使って比較することができます。
大小比較だけであれば、これで十分です。

同じtime型であるからこそ、このように比較が可能になります。

datetime型オブジェクトからtime型オブジェクトの抽出

まず、次のように現在時刻を表現できないことを理解しておきましょう。

datetime.time()00:00:00
datetime.time().now()エラー

つまり、「datetime.time()」を利用して現在時刻の取得ができないのです。
確かに、日付の概念なしで現在という概念は成り立ちません。

そこで、日付の概念を持つdatetime型を利用します。
コードとしては、次の部分になります。

# 現在時間
dt_now = datetime.datetime.now()
now = dt_now.time()

一旦、datetime型で現在日時を取得してdt_now変数に格納します。
そして、そのdt_now変数(datetime型)からtime型のデータを抽出しています。

もちろん、同じようにdate型のデータのみを抽出することも可能です。
その場合は、次のようなコードになります。

# 現在日
dt_now = datetime.datetime.now()
today = dt_now.date()

まとめ

内容的には、プログラムの基本のようになってしまいました。

  • データは同じ型同士で比較する
  • 同じ型になるようにデータを加工する

これは、本当に基本的なことです。
たまには、こういう基本を振り返るのはありだと思います。

どうしても、テクニックで逃げてしまうことが多くなりがちです。
プログラミングに慣れれば慣れるほど、その兆候があります。

以上、Pythonで時間・時刻比較を行う方法を説明しました。

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