2013-04-22 22 views
8

Problem polega na tym, że chcę, aby ignorował datę i tylko czynnik w czasie. Oto co mam:Wyodrębnij czas z datetime i sprawdź, czy czas (nie data) mieści się w zakresie?

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 

jak jest, otrzymuję ten błąd:

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

Kiedy zmienić odpowiednią linię do:

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

otrzymuję ten błąd:

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

Wiem, że pracuję z dwoma różnicami erent biblioteki lub co tam, ale nie jestem pewien, jak przekonwertować między nimi lub osiągnąć to, co chcę zrobić tylko przy użyciu jednego. Chcę tylko, aby ignorował datę i sprawdzał tylko, czy czas mieści się w podanych zakresach. Python 2.6 jest MUSI z powodu biblioteki, której używam w innym miejscu kodu.

Odpowiedz

14

Linia:

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

zwraca datetime obiekt as per the docs.

Można to sprawdzić samemu, uruchamiając następującą komendę interaktywnie w tłumacza:

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

Część czas zwróconego datetime można następnie uzyskać za pomocą metody .time().

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

Wynik datetime.time() może być następnie użyty do porównań czasu.

+0

Dzięki! Doceniam to! – Dan