【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です。
この記事が気に入ったらサポートをしてみませんか?