見出し画像

【python3】特定の時間帯にだけ動かすプログラムを作る

とりあえず、結論

from datetime import datetime, time

start = time(9,0,0)
end = time(17,0,0)
now = datetime.now().time()

if now => start and now < end:
    print("業務時間中です")
else:
    print("業務時間外です")


「9時~17時までの間だけ処理します」みたいなやつを作ります。

バッチ処理ならこの辺の指定はcronjobとかでやった方がいいんですが(処理しないならそもそも起動させない方が良いよね)、まあ、python側で制御する必要があるときも、あるよね。タイムカードの処理とかで、押された時間で分岐させたい時とかね。

何をしているか

説明するほどのこっちゃないですが、まず判断基準にする時刻オブジェクトを作ります。datetimeモジュールからtimeクラスをimportして使います。

import datetime import time

start = time(9,0,0)
end = time(17,0,0)

timeクラスのインスタンスを作る際は、時・分・秒を与えます。分と秒は省略できますが、明記しといた方が安心ですね。

続いて、現在時刻を取得します。このとき「現在」は、

import datetime import datetime
now = datetime.now()

で取得できますが、これはあくまで「datetime」オブジェクトになるので、timeオブジェクトとは比較ができません。日付の処理どーすんの、ってなっちゃうのでね。

なのでここは、

now = datetime.now().time()

で、datetime.now()を取得した後、そこからさらにtime()を使ってtimeオブジェクトに変換してあげます。

(ちなみに、time.now()で現在の時刻だけ取れれば直感的でいいのに……って思うんですけど、これは取れないんですね……いったんdatetime.now()を挟んで上げる必要があります)

あとは

if now => start and now < end:
    print("業務時間中です")
else:
    print("業務時間外です")

で、比較演算子を使って比較ができます。

私はどうも脳内で数値を処理する能力が欠如しているので、時間を不等号で比較するのがどうしてもピンとこないのですが、冷静に考えれば、1時と5時、どっちが数字大きい?って話なんですよね。
ということで、【早い時刻 < 遅い時刻】で比較すればOKです。

この記事が気に入ったらサポートをしてみませんか?