在python中如何检查时间介于两次之间

在python中如何检查时间介于两次之间,python,Python,例如,如果我有 测试案例1:(9:00-16:00)和 测试案例2:(21:30-4:30) 也就是说,无论第一个或第二个数字是否大于另一个数字,它都起作用 您可以创建datetime.datetime对象并进行比较 >>> start = datetime.datetime(2017, 7, 23, 9, 0) >>> end = datetime.datetime(2017, 7, 23, 16, 0) >>> start < d

例如,如果我有

测试案例1:(9:00-16:00)和

测试案例2:(21:30-4:30)


也就是说,无论第一个或第二个数字是否大于另一个数字,它都起作用

您可以创建
datetime.datetime
对象并进行比较

>>> start = datetime.datetime(2017, 7, 23, 9, 0)
>>> end = datetime.datetime(2017, 7, 23, 16, 0) 
>>> start < datetime.datetime(2017, 7, 23, 11, 0) < end
True
>>> start < datetime.datetime(2017, 7, 23, 18, 0) < end
False

您只需将“时间”转换为每天分钟:

def minutesPerDay(tme):
    hours, minutes = tme.split(':')
    return (hours*60)+minutes

def checkTime(tme, tmeRange):
    return minutesPerDay(tmeRange[0]) < minutesPerDay(tme) < tmeRange[1]


print(checkTime('11:00', ('09:00', '16:00')))  # True
print(checkTime('17:00', ('09:00', '16:00')))  # False
def分钟/天(tme):
小时,分钟=tme.split(“:”)
返回时间(小时*60)+分钟
def检查时间(tme、tmeRange):
返回每日分钟数(tmeRange[0])<每日分钟数(tme)
如果您将时间归零,则可以使用纯词典字串比较-然后您只需确定第二次的时间是否比第一次“小”,并在两天内检查该特殊情况,例如:

def is_between(time, time_range):
    if time_range[1] < time_range[0]:
        return time >= time_range[0] or time <= time_range[1]
    return time_range[0] <= time <= time_range[1]

print(is_between("11:00", ("09:00", "16:00")))  # True
print(is_between("17:00", ("09:00", "16:00")))  # False
print(is_between("01:15", ("21:30", "04:30")))  # True
def介于(时间,时间范围):
如果时间范围[1]<时间范围[0]:

返回时间>=TimeIn范围(0)或时间,在“工作”下你会考虑什么?这两个时间会给你考虑的时间差异带来很大的不同。第一次总是被认为是第二次的前一次吗?非常简单,
start\u time
false@Mat.S如果您不指定如何表示时间,则问题没有答案。请发布您现在使用的代码,并举例说明它是否如您所期望的那样起作用。如果您没有代码和测试用例,那么在这里发布您的问题还为时过早。这将在OP的第二个测试用例中失败(时间范围跨越两天),例如
checkTime(“02:00”)、(“21:30”、“04:30”))
。这有点过分了,它仍然不能处理OP想要检查跨越两天的范围的事实。它完全可以处理,只要他指定日期时间。如果他不回答的话,我会给这个问题下定义。不,没有。如果
start=datetime.time(21,30)
end=datetime.time(4,30)
(第二天)与OP的
test_case2
一样,如果您要查找的时间是
time=datetime.time(2,0)
-
start
将计算为
False
,即使它在该时间范围内。现在已经说过两次了(并用在我一半的答案中),只要你使用
datetime
而不是
time
,就可以了。这里不是为了争论,但是OP甚至一次都没有提到日期——他想比较时间。如果不考虑时间可能跨越两天,那么时间就无法在一个范围内进行比较,而OP恰恰是在问如何做。你的答案没有回答老年退休金计划的问题。
def is_between(time, time_range):
    if time_range[1] < time_range[0]:
        return time >= time_range[0] or time <= time_range[1]
    return time_range[0] <= time <= time_range[1]

print(is_between("11:00", ("09:00", "16:00")))  # True
print(is_between("17:00", ("09:00", "16:00")))  # False
print(is_between("01:15", ("21:30", "04:30")))  # True