2012-11-15 41 views
0

获得在给定时间范围内的时间的最佳做法。x时间范围内的时间(24h时间格式)

当前小时:22:00
时限(启动,班次的结束时间):

00:00 - 08:00 
04:00 - 12:00 
08:00 - 16:00 
12:00 - 20:00 
16:00 - 00:00 
20:00 - 04:00 

使用逻辑:

if currentHour >= startHour and currentHour <= endHour: 
    ... 

并没有真正因为工作如果时间是22:00,则不会小于04:00。 使用OR将无法工作,因为从那时起22将会超过00:00,这是不对的。

哎呀,我不知道这是否是缺少咖啡因或什么,但我只是不能换我的头周围的...

回答

2

你要记住的是,如果endHour < startHour,它实际上是在不同的一天,即。比它说的晚24小时。同样,在这个范围内的一个小时内,它可能在任何一天,所以如果它是< startHour,它可能在第二天。

if currentHour < startHour: 
    currentHour += 24 
if endHour < startHour: 
    endHour += 24 

if currentHour >= startHour and currentHour <= endHour: 
    //...code 
+0

小心解释为什么要在currentHour中添加+24,如果小时数为23,那么会使其成为47?!? – Torxed

+1

表示当前的小时(也可能是startHour)实际上是在第二天 –

+0

尝试过它,现在至少工作(23:34),需要爱的计算器并且它是大脑!我很累,我只是在这个问题上纠缠在脑海里,谢谢雅各布,迄今为止工作完美! – Torxed

0

如果00:00的时间内结束,使其24: 00。这将解决您的if声明以预期的方式工作。

我的坏:做这个

if currentHour >= startHour and currentHour <= endHour or currentHour <= startHour and currentHour >= endHour :

编辑:这将生成以下,

print cur, start, end, logic1, logic2 
23 8 0 False False 
23 20 12 False False 
23 0 20 False False 
23 12 4 False False 
23 8 16 False False 
23 16 8 False False 
+0

它不处理04:00,虽然 –

+1

但它不是。 OP使用'20:00 - 4:00'。 (我相信那些是'starttime endtime'的列) – mgilson

+0

你编辑过的案例_still_没有捕捉到实际的例子 –