2015-11-05 173 views
0

我可以檢查時間A是否晚於時間B或不日期 - 時間比較

A.time() > B.time(): 

但有什麼訣竅做同樣的午夜?

from datetime import datetime 
from datetime import timedelta 

movies = [ 
"13:00 Alien Beetroot", 
"15:30 Bananas Go Bad!", 
"17:45 Cheerleader Lake", 
"19:00 Yoghurt Spoon Eater", 
"21:10 Zombie A Go-Go", 
"23:30 Shark Snacks VI", 
"02:15 Drive-In Dinosaur Disaster" 
] 

myTime = "18:30" 
myDate = "Wed 03 November 2015" 
cineDate = "Wed 03 November 2015" 
t = datetime.strptime(myDate + " " + myTime, "%a %d %B %Y %H:%M") 

for i in range(0, len(movies)): 
    sp = movies[i].split(" ", 1) 
    tim = sp[0] 
    mov = sp[1] 
    show = datetime.strptime(cineDate + " " + tim, "%a %d %B %Y %H:%M") 

    if show.time() >= t.time(): 
    print tim + " " + mov 

我希望腳本能夠在18:30後列出所有電影,但它會錯過最後一個。我是否應該存儲所有電影的日期時間,並以這種方式進行比較,還是有更簡單的方法?

+0

降'。時間()'調用和使用[此算法基礎上,及時調整'show'時間爲以前的電影](http://stackoverflow.com/a/33561802/4279) – jfs

回答

1

你可以假設你早上6點(例如)下一次的約會結束。換句話說,「02:15駕駛恐龍災難」屬於下一個日期,但對你而言,雖然是在午夜之後,它仍是同一日期。如果你只需要比較小時和分鐘,你可以像這樣的6小時縮短您的日期時間:

movies = [ 
"13:00 Alien Beetroot", 
"15:30 Bananas Go Bad!", 
"17:45 Cheerleader Lake", 
"19:00 Yoghurt Spoon Eater", 
"21:10 Zombie A Go-Go", 
"23:30 Shark Snacks VI", 
"02:15 Drive-In Dinosaur Disaster" 
] 

myTime = (18, 30) # hours and minutes 

myTime_reduced = ((myTime[0] - 6) % 24, myTime[1]) # the mentioned reduce 

for i in range(0, len(movies)): 
    sp = movies[i].split(" ", 1) 
    tim = sp[0] 
    mov = sp[1] 

    h, m = tim.split(':') 

    h_reduced = (h - 6) % 24 # the mentioned reduce 

    if h_reduced > myTime_reduced[0] or (h_reduced == myTime_reduced[0] and m > myTime_reduced[1]): 
     print tim + " " + mov