El problema es que quiero que ignore la fecha y solo tenga en cuenta el tiempo. Esto es lo que tengo:
import time from time import mktime from datetime import datetime def getTimeCat(Datetime): # extract time categories str_time = datetime.strptime(Datetime, "%m/%j/%y %H:%M") ts = datetime.fromtimestamp(mktime(str_time)) # --> Morning = 0400-1000 mornStart = datetime.time(4, 0, 1) mornEnd = datetime.time(10, 0, 0) # --> Midday = 1000-1600 midStart = datetime.time(10, 0, 1) midEnd = datetime.time(16, 0, 0) # --> Evening = 1600-2200 eveStart = datetime.time(16, 0, 1) eveEnd = datetime.time(22, 0, 0) # --> Late Night = 2200-0400 lateStart = datetime.time(22, 0, 1) lateEnd = datetime.time(4, 0, 0) if time_in_range(mornStart, mornEnd, ts): timecat = 0 #morning elif time_in_range(midStart, midEnd, ts): timecat = 1 #midday elif time_in_range(eveStart, eveEnd, ts): timecat = 2 #evening elif time_in_range(lateStart, lateEnd, ts): timecat = 3 #late night return timecat
Como es, me sale este error:
TypeError: argument must be 9-item sequence, not datetime.datetime
Cuando cambio la línea correspondiente a:
str_time = time.strptime(Datetime, "%m/%j/%y %H:%M")
Me sale este error:
TypeError: descriptor 'time' requires a 'datetime.datetime' object but received a 'int'
Sé que estoy trabajando con dos bibliotecas diferentes o lo que sea, pero no estoy seguro de cómo convertir entre ellas o de lograr lo que quiero hacer solo con una. Solo quiero que ignore la fecha y solo compruebe si la hora está dentro de los rangos especificados. Python 2.6 es DEBIDO a una biblioteca que estoy usando en otra parte del código.
Esta línea:
str_time = datetime.strptime(Datetime, "%m/%j/%y %H:%M")
devuelve un objeto de datetime
y datetime
según los documentos .
Puede probarlo usted mismo ejecutando el siguiente comando de forma interactiva en el intérprete:
>>> import datetime >>> datetime.datetime.strptime('12/31/13 00:12', "%m/%j/%y %H:%M") datetime.datetime(2013, 1, 31, 0, 12) >>>
Se puede acceder a la parte de tiempo del datetime devuelto usando el método .time()
.
>>> datetime.datetime.strptime('12/31/13 00:12', "%m/%j/%y %H:%M").time() datetime.time(0, 12) >>>
El resultado de datetime.time()
se puede usar en tus comparaciones de tiempo.