「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で時間・時刻比較を行う方法を説明しました。