2015-11-05 234 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