2013-04-22 12 views
8

Das Problem ist, dass ich will, dass es das Datum und nur Faktor in der Zeit ignoriert. Hier ist, was ich habe:Zeit von datetime extrahieren und bestimmen, ob die Zeit (nicht das Datum) in den Bereich fällt?

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 

Wie ist, ich diese Fehlermeldung erhalten:

TypeError: argument must be 9-item sequence, not datetime.datetime 

Wenn ich die entsprechende Zeile zu ändern:

str_time = time.strptime(Datetime, "%m/%j/%y %H:%M") 

bekomme ich diesen Fehler:

TypeError: descriptor 'time' requires a 'datetime.datetime' object but received a 'int' 

Ich weiß, ich arbeite mit zwei diff Bibliotheken oder was auch immer, aber ich bin nicht sicher, wie man zwischen ihnen umwandelt oder was ich tun möchte, nur eins verwendend. Ich möchte nur, dass das Datum ignoriert wird und nur überprüft wird, ob die Zeit innerhalb der angegebenen Bereiche liegt. Python 2.6 ist ein MUSS aufgrund einer Bibliothek, die ich an anderer Stelle im Code verwende.

Antwort

14

Diese Zeile:

str_time = datetime.strptime(Datetime, "%m/%j/%y %H:%M") 

gibt ein datetime Objekt as per the docs.

können Sie testen diese sich durch den folgenden Befehl interaktiv in dem Interpreter ausgeführt wird:

>>> import datetime 
>>> datetime.datetime.strptime('12/31/13 00:12', "%m/%j/%y %H:%M") 
datetime.datetime(2013, 1, 31, 0, 12) 
>>> 

Der Zeitteil des zurückgegebenen Datetime kann dann zugegriffen werden mit der .time() Methode.

>>> datetime.datetime.strptime('12/31/13 00:12', "%m/%j/%y %H:%M").time() 
datetime.time(0, 12) 
>>> 

Das Ergebnis datetime.time() kann dann in Ihren Zeitvergleichen verwendet werden.

+0

Danke! Ich schätze es! – Dan