我需要检查当前时间是否在时间范围内。最简单的案例时间结束时间开始时间:
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']
?
Python解决方案将会更短。
将
datetime.time
类用于start
、end
和x
。日期/时间比你想象的要复杂
涉及日期/时间的计算可能非常棘手,因为您必须考虑时区、闰年、日光节约和许多角落情况。有一个enlightening video from the talk by Taavi Burns at PyCon2012题为“您需要了解的日期时间”:
使用时区感知日期时间进行计算
明天的
datetime.time
概念是无效的,因为datetime.time
缺少任何日期信息。在比较之前,您可能希望将所有内容转换为时区感知datetime.datetime
:相关问题 更多 >
编程相关推荐