如何在python中检查当前时间是否在范围内?

如何在python中检查当前时间是否在范围内?,python,datetime,range,Python,Datetime,Range,我需要检查当前时间是否在时间范围内。最简单的情况是时间结束>时间开始: if time(6,0) <= now.time() <= time(12,00): print '1' 如果时间(6,0)$tstart) 返回true; 如果($tnow-$tstart>0&$tnow>tend),则为else 返回true; 如果出现其他情况($tend>$tnow&&$tend$tnow) 返回true; 否则返回false; }否则 { 如果($tstart$tnow) 返回true

我需要检查当前时间是否在时间范围内。最简单的情况是时间结束>时间开始:

if time(6,0) <= now.time() <= time(12,00): print '1'
如果时间(6,0)$tstart)
返回true;
如果($tnow-$tstart>0&$tnow>tend),则为else
返回true;
如果出现其他情况($tend>$tnow&&$tend<$tstart&&$tstart>$tnow)
返回true;
否则返回false;
}否则
{
如果($tstart<$tnow&$tend>$tnow)
返回true;
其他的
返回false;
}

现在我需要做同样的事情,但我想让它好看。那么,我应该使用什么算法来确定当前时间“00: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
日期/时间比你想象的要复杂 涉及日期/时间的计算是非常棘手的,因为你必须考虑时区、闰年、天数节省和大量的拐角情况。有一个标题为“关于日期时间,您需要了解的内容”:


标准库中的
time
datetime
calendar
有点乱。了解:在何处使用什么以及如何使用(特别是当您的用户位于多个时区时),以及您可能希望查看哪些额外模块

活动:PyCon美国2012/演讲者:Taavi Burns/录制:2012年3月10日

使用时区感知日期时间进行计算 明天的
datetime.time
的概念是无效的,因为
datetime.time
缺少任何日期信息。在比较之前,您可能希望将所有内容转换为时区感知的
datetime.datetime

def time_in_range(start, end, x):
    today = timezone.localtime().date()
    start = timezone.make_aware(datetime.datetime.combine(today, start))
    end = timezone.make_aware(datetime.datetime.combine(today, end))
    x = timezone.make_aware(datetime.datetime.combine(today, x))
    if end <= start:
        end += datetime.timedelta(days=1) # tomorrow!
    if x <= start
        x += datetime.timedelta(days=1) # tomorrow!
    return start <= x <= end
def time_在_范围内(开始、结束、x):
今天=时区.localtime().date()
开始=时区。注意(datetime.datetime.combine(今天开始))
end=时区。使_知晓(datetime.datetime.combine(今天,结束))
x=时区。使_知晓(datetime.datetime.combine(今天,x))

如果end如果start=今天[10:00],end=明天[10:00],x=11:00,那么
start@PauloScardine:您必须选择如何解释它:[10:00,10:00]的长度是0小时还是24小时。两种解释都可以。换句话说,你说的是
开始
,但我选择了
开始如果你要跨越两天之间的界限,比较没有日期的时间的整个概念是脆弱的。不一定。例如,如果你经营一家每周7天从早上7点到凌晨1点营业的商店,会怎么样?这正是你需要弄清楚商店是否开门的功能。问题是关于当前时间的,但在我看来是datetime。时间(23,30,0)并没有让OP放松,他只有27名众议员对他的问题投了否决票,但没有告诉他为什么不教育他。很高兴看到OP的声誉在过去五年中不断提高。谢谢。我没有考试,但你的解释对我来说很清楚。早上好
>>> 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
def time_in_range(start, end, x):
    today = timezone.localtime().date()
    start = timezone.make_aware(datetime.datetime.combine(today, start))
    end = timezone.make_aware(datetime.datetime.combine(today, end))
    x = timezone.make_aware(datetime.datetime.combine(today, x))
    if end <= start:
        end += datetime.timedelta(days=1) # tomorrow!
    if x <= start
        x += datetime.timedelta(days=1) # tomorrow!
    return start <= x <= end