0

获取给定时间范围内的时间的最佳实践。

当前时间: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,这是不对的。

啊,我不知道是缺乏咖啡因还是什么,但我就是无法理解它......

4

2 回答 2

2

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

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

if currentHour >= startHour and currentHour <= endHour:
   //...code
于 2012-11-15T21:06:11.483 回答
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
于 2012-11-15T21:03:12.113 回答