2012-11-15 62 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_沒有捕捉到實際的例子 –