How to check if the current time is in range in python?
datetime, python, range
Solution
The Python solution is going to be much, much shorter.
def time_in_range(start, end, x):
"""Return true if x is in the range [start, end]"""
if start <= end:
return start <= x <= end
else:
return start <= x or x <= end
Use the `datetime.time` class for `start`, `end`, and `x`.
>>> import datetime
>>> start = datetime.time(23, 0, 0)
>>> end = datetime.time(1, 0, 0)
>>> time_in_range(start, end, datetime.time(23, 30, 0))
True
>>> time_in_range(start, end, datetime.time(12, 30, 0))
False
Problem
I need to check if the current time is in timerange. The most simple case time_end > time_start: ``` if time(6,0) <= now.time() <= time(12,00): print '1' ``` But troubles begin when user enters a time range when the end time is smaller than the start time, e.g. "23:00 - 06:00". A time like '00:00' will be in this range. About 5 years ago I wrote this PHP function: ``` function checkInterval($start, $end) { $dt = date("H:i:s"); $tstart = explode(":", $start); $tend = explode(":", $end); $tnow = explode(":", $dt); if (!$tstart[2]) $tstart[2] = 0; if (!$tend[2]) $tend[2] = 0; $tstart = $tstart[0]*60*60 + $tstart[1]*60 + $tstart[2]; $tend = $tend[0]*60*60 + $tend[1]*60 + $tend[2]; $tnow = $tnow[0]*60*60 + $tnow[1]*60 + $tnow[2]; if ($tend < $tstart) { if ($tend - $tnow > 0 && $tnow > $tstart) return true; else if ($tnow - $tstart > 0 && $tnow > $tend) return true; else if ($tend > $tnow && $tend < $tstart && $tstart > $tnow) return true; else return false; } else { if ($tstart < $tnow && $tend > $tnow) return true; else return false; } ``` Now I need to do the same thing, but I want to make it good looking. So, what algorithm should I use to determine if the current time '00:00' is in reversed range e.g. `['23:00', '01:00']`?