2012-04-06 15 views
17

¿Cuál sería la mejor manera de ver si la hora actual se encuentra entre decir 10:30 AM y 4:30 PM.¿Cómo puedo determinar si la hora actual está dentro de un rango específico usando el módulo de fecha y hora de Python?

que podría pensar en lo siguiente, sin saber cómo correcta:

from datetime import datetime 
nw = datetime.now() 
hrs = nw.hour;mins = nw.minute;secs = nw.second; 
zero = timedelta(seconds = secs+mins*60+hrs*3600) 
st = nw - zero # this take me to 0 hours. 
time1 = st + timedelta(seconds=10*3600+30*60) # this gives 10:30 AM 
time2 = st + timedelta(seconds=16*3600+30*60) # this gives 4:30 PM 
if nw>= time1 or nw <= time2: 
    print "yes, within the interval" 

Por favor, hágamelo saber si este el enfoque correcto, puede ser escrito algo mejor?

+0

'timedelta()' le permite especificar días, horas y minutos demasiado , por lo que no tiene que calcularlo y el código es más legible. – C2H5OH

+0

thnaks, me había perdido eso. – user993563

Respuesta

41
from datetime import datetime, time 
now = datetime.now() 
now_time = now.time() 
if now_time >= time(10,30) and now_time <= time(16,30): 
    print "yes, within the interval" 

una comprobación alternativa sugerida por Rik:

if time(10,30) <= now.time() <= time(16,30):   
    print "yes, within the interval" 

Nota al margen, el OP utilizó un or en su/su ejemplo que no logra el efecto deseado de la comprobación de que las mentiras de tiempos actuales en el rango.

+8

También debería funcionar con: 'if time (10,30) <= now.time() <= time (16,30):'. –

+0

Una extensión: cómo hago estas comparaciones para la fecha. digamos hoy es 12 de marzo. Entonces, ¿cómo puedo verificar si una fecha determinada es el 12 de marzo? – user993563

+0

@ user993563: Consulte el ['datetime' doc] (http://docs.python.org/py3k/library/datetime.html#available-types), y en particular [' datetime.date'] (http: //docs.python.org/py3k/library/datetime.html#date-objects). –

10

La solución aceptada no funciona con tiempos durante la noche:

def isNowInTimePeriod(startTime, endTime, nowTime): 
    if startTime < endTime: 
     return nowTime >= startTime and nowTime <= endTime 
    else: #Over midnight 
     return nowTime >= startTime or nowTime <= endTime 
+2

Excelente solución. Tenga en cuenta que startTime, endTime y nowTime son objetos de tiempo, puede acceder a la parte de tiempo de un objeto datetime con 'datetime.time()' – Braza

+1

¡Cómo le falta a todo el mundo! –

0

aquí es pequeño ejemplo de respuesta de @ rublo:

from datetime import datetime 

def isNowInTimePeriod(startTime, endTime, nowTime): 
    if startTime < endTime: 
     return nowTime >= startTime and nowTime <= endTime 
    else: #Over midnight 
     return nowTime >= startTime or nowTime <= endTime 


timeStart = '3:00PM' 
timeEnd = '11:00AM' 
timeNow = '2:59AM' 
timeEnd = datetime.strptime(timeEnd, "%I:%M%p") 
timeStart = datetime.strptime(timeStart, "%I:%M%p") 
timeNow = datetime.strptime(timeNow, "%I:%M%p") 

print(isNowInTimePeriod(timeStart, timeEnd, timeNow)) 
Cuestiones relacionadas