Extract time from date and time and determine if time (not date) is within range?

The problem is that I want her to ignore the date and only the time factor. Here is what I have:

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 

As is, I get this error:

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

When I change the corresponding line to:

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

I get this error:

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

I know that I work with two different libraries or something else, but I'm not sure how to convert between them or to accomplish what I want to do, just using one. I just want it to ignore the date and only check if the time is within the specified limits. Python 2.6 is MUST due to the library that I use elsewhere in the code.

+8
python datetime
source share
1 answer

This line:

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

returns a datetime object according to documents .

You can verify this yourself by running the following command interactively in the interpreter:

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

The temporary part of the datetime returned time can be obtained using the .time() method.

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

The result of datetime.time() can be used in your time comparisons.

+14
source share

All Articles