How do I determine if current time is within a specified range using Python's datetime module?
python, python-datetime
Solution
My original answer focused very specifically on the question as posed and didn't accommodate time ranges that span midnight. As this is still the accepted answer 6 years later, I've incorporated @rouble's answer below that expanded on mine to support midnight.
from datetime import datetime, time
def is_time_between(begin_time, end_time, check_time=None):
# If check time is not given, default to current UTC time
check_time = check_time or datetime.utcnow().time()
if begin_time < end_time:
return check_time >= begin_time and check_time <= end_time
else: # crosses midnight
return check_time >= begin_time or check_time <= end_time
# Original test case from OP
is_time_between(time(10,30), time(16,30))
# Test case when range crosses midnight
is_time_between(time(22,0), time(4,00))
I still stick to my original comment below that most applications of this logic would probably be better suited with `datetime` objects where crossing midnight is reflected as a date change anyway.
Problem
What would be the best way to see if the current time lies between say `10:30 AM` and `4:30 PM`. I could think of the following, not sure how correct: ``` from datetime import datetime nw = datetime.now() hrs = nw.hour;mins = nw.minute;secs = nw.second; zero = timedelta(seconds = secs+mins*60+hrs*3600) st = nw - zero # this take me to 0 hours. time1 = st + timedelta(seconds=10*3600+30*60) # this gives 10:30 AM time2 = st + timedelta(seconds=16*3600+30*60) # this gives 4:30 PM if nw>= time1 or nw <= time2: print "yes, within the interval" ``` Please let me know if this the correct approach, can something better be written?