Create Range of Hours in Python

So I'm looking to take input such as 7:00 AM as a start time, and say, 10:00 PM as an endtime, and then compare a set of times (also in the form of 8:00 AM, 3:00 PM, etc) to see if those time are or aren't in the range of time. Is there a good way to create a "day" that has a range of hours (the endtimes can be as late as 4:00 AM, so I was figuring I would go from 6:00 AM - 5:59 AM instead of midnight - 11:59 PM, if that's possible) that I can check times against?

For example: starttime = 8:00 AM, endtime = 3:00 AM, and checking time = 7:00 AM would return time as being out of the range.

Thanks!

Answers


Use datetime parsing and comparison capabilities:

from datetime import datetime, timedelta

def parse_time(s):
    ''' Parse 12-hours format '''
    return datetime.strptime(s, '%I:%M %p')

starttime = parse_time('8:00 AM')
endtime   = parse_time('3:00 AM')
if endtime < starttime:
   # add 1 day to the end so that it's after start
   endtime += timedelta(days=1)

checked_time = parse_time('7:00 AM')

# Can compare:
print starttime <= checked_time < endtime

I'd probably use the datetime library. Use strptime() on your input strings, then you can compare the datetime objects directly.


Convert all times into a 24-hour format, taking minutes and seconds as fractions of hours, then just compare them as numbers to see if a time lies in an interval.


Python's datetime.* classes already support comparison:

>>> import datetime
>>> datetime.datetime(2012,10,2,10) > datetime.datetime(2012,10,2,11)
False
>>> datetime.datetime(2012,10,2,10) > datetime.datetime(2012,10,2,9)
True

So all you have to do is declare a class TimeRange, with two members startTime and endTime. Then a "inside" function can be as simple as:

def inside(self, time):
    return self.startTime <= time and time <= self.endTime

Need Your Help

How to draw text with a shadow like Windows XP does on Desktop icons?

windows-xp gdi shadow drawtext

Windows XP draws icon text with a nice shadow, which helps to read the text on various backgrounds. The font color is white and the shadow is black (if desktop background is white) or there is no s...

error tapestry using data gridsource 2

java datagrid error-handling tapestry

Continuing tutorial I have came across an error.