我需要检查当前时间是否在时间范围内。最简单的情况是time_end> time_start:
if time(6,0) <= now.time() <= time(12,00): print '1'
但是,当用户输入结束时间小于开始时间的时间范围时,麻烦就开始了,例如“ 23:00-06:00”。像“ 00:00”这样的时间将在此范围内。大约5年前,我编写了以下PHP函数:
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; }
现在我需要做同样的事情,但是我想让它看起来好看。因此,我应该使用哪种算法来确定当前时间‘00:00’是否在 反向 范围内['23:00', '01:00']?
['23:00', '01:00']
Python解决方案要短得多。
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
使用datetime.time类start,end和x。
datetime.time
start
end
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