I see that date comparisons can be done and there’s also datetime.timedelta(), but I’m struggling to find out how to check if the current time (datetime.datetime.now()) is earlier, later or the same than a specified time (e.g. 8am) regardless of the date.
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
You can’t compare a specific point in time (such as “right now”) against an unfixed, recurring event (8am happens every day).
You can check if now is before or after today’s 8am:
>>> import datetime >>> now = datetime.datetime.now() >>> today8am = now.replace(hour=8, minute=0, second=0, microsecond=0) >>> now < today8am True >>> now == today8am False >>> now > today8am False
Method 2
You can use the time() method of datetime objects to get the time of day, which you can use for comparison without taking the date into account:
>>> this_morning = datetime.datetime(2009, 12, 2, 9, 30) >>> last_night = datetime.datetime(2009, 12, 1, 20, 0) >>> this_morning.time() < last_night.time() True
Method 3
You can compare datetime.datetime objects directly
E.g:
>>> a datetime.datetime(2009, 12, 2, 10, 24, 34, 198130) >>> b datetime.datetime(2009, 12, 2, 10, 24, 36, 910128) >>> a < b True >>> a > b False >>> a == a True >>> b == b True >>>
Method 4
Surprised I haven’t seen this one liner here:
datetime.datetime.now().hour == 8
Method 5
Inspired by Roger Pate:
import datetime def todayAt (hr, min=0, sec=0, micros=0): now = datetime.datetime.now() return now.replace(hour=hr, minute=min, second=sec, microsecond=micros) # Usage demo1: print todayAt (17), todayAt (17, 15) # Usage demo2: timeNow = datetime.datetime.now() if timeNow < todayAt (13): print "Too Early"
Method 6
You Can Use Timedelta fuction for x time increase comparision.
>>> import datetime >>> now = datetime.datetime.now() >>> after_10_min = now + datetime.timedelta(minutes = 10) >>> now > after_10_min False
Just A combination of these answers this And Roger
Method 7
Another way to do this without adding dependencies or using datetime is to simply do some math on the attributes of the time object. It has hours, minutes, seconds, milliseconds, and a timezone. For very simple comparisons, hours and minutes should be sufficient.
d = datetime.utcnow() t = d.time() print t.hour,t.minute,t.second
I don’t recommend doing this unless you have an incredibly simple use-case. For anything requiring timezone awareness or awareness of dates, you should be using datetime.
Method 8
datetime have comparison capability
>>> import datetime >>> import time >>> a = datetime.datetime.now() >>> time.sleep(2.0) >>> b = datetime.datetime.now() >>> print a < b True >>> print a == b False
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0