Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I determine if current time is within a specified range using Python's datetime module?

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?

like image 572
user993563 Avatar asked Apr 06 '12 19:04

user993563


People also ask

How do I get current time zone in Python?

To get the current time in particular, you can use the strftime() method and pass into it the string ”%H:%M:%S” representing hours, minutes, and seconds.

Which Python module can tell you the current time and date?

We can use Python datetime module to get the current date and time of the local system.

How do you check if a time is valid or not in Python?

Python Program :split('/') isValidDate = True try: datetime. datetime(int(year), int(month), int(day)) except ValueError: isValidDate = False if(isValidDate): print("Input date is valid ..") else: print("Input date is not valid..")


1 Answers

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.

like image 67
Joe Holloway Avatar answered Sep 20 '22 12:09

Joe Holloway