絶対時間はdatetime.timedelta
の代わりにdatetime.time
を使用すると思います。それにもかかわらず、ここにはあなたの既存の状況を考慮して動作するはずのものがあります。
def is_in_time_range(start, end, time):
if end < start:
return start < time or end > time
return start < time < end
from datetime import timedelta
>>> is_in_time_range(timedelta(hours=21), timedelta(hours=3), timedelta(hours=23))
True
>>> is_in_time_range(timedelta(hours=21), timedelta(hours=3), timedelta(hours=4))
False
>>> is_in_time_range(timedelta(hours=21), timedelta(hours=3), timedelta(hours=2))
True
あなたは、私が提案してきたように代わりdatetime.time
を使用することを決定した場合、この解決策はまだ動作します:
from datetime import time
>>> is_in_time_range(time(hour=21), time(hour=3), time(hour=23))
True
>>> is_in_time_range(time(hour=21), time(hour=3), time(hour=4))
False
>>> is_in_time_range(time(hour=21), time(hour=3), time(hour=2))
True
diff(23,21)がdiff(23,3)より小さいかどうかを確認しますか? –
終了時刻は開始時刻から24時間以内に保証されていますか?そうでない場合、複雑になる可能性があります。開始時刻が月曜日の午後11時で、終了時刻が水曜日の午前3時であれば、火曜日の午前11時を話している限り、午前11時という任意の時間がそれらの間にあります。これが可能であれば、開始時刻と終了時刻以外の何かが必要になります。 –
@DavidJenkinsはい、それは常に24時間以内にしかありません。したがって、任意の時間、つまり午後3時を選択した場合、範囲(変更対象)は午前6時から午後12時の間と言いますが、これは範囲内ではありません。 – sgript