How to compare two dates?
Question:
How would I compare two dates to see which is later, using Python?
For example, I want to check if the current date is past the last date in this list I am creating, of holiday dates, so that it will send an email automatically, telling the admin to update the holiday.txt file.
Answers:
Use the datetime
method and the operator <
and its kin.
>>> from datetime import datetime, timedelta
>>> past = datetime.now() - timedelta(days=1)
>>> present = datetime.now()
>>> past < present
True
>>> datetime(3000, 1, 1) < present
False
>>> present - datetime(2000, 4, 4)
datetime.timedelta(4242, 75703, 762105)
datetime.date(2011, 1, 1) < datetime.date(2011, 1, 2)
will return True
.
datetime.date(2011, 1, 1) - datetime.date(2011, 1, 2)
will return datetime.timedelta(-1)
.
datetime.date(2011, 1, 1) + datetime.date(2011, 1, 2)
will return datetime.timedelta(1)
.
see the docs.
Use time
Let’s say you have the initial dates as strings like these:
date1 = "31/12/2015"
date2 = "01/01/2016"
You can do the following:
newdate1 = time.strptime(date1, "%d/%m/%Y")
newdate2 = time.strptime(date2, "%d/%m/%Y")
to convert them to python’s date format. Then, the comparison is obvious:
newdate1 > newdate2
will return False
newdate1 < newdate2
will return True
Other answers using datetime
and comparisons also work for time only, without a date.
For example, to check if right now it is more or less than 8:00 a.m., we can use:
import datetime
eight_am = datetime.time( 8,0,0 ) # Time, without a date
And later compare with:
datetime.datetime.now().time() > eight_am
which will return True
For calculating days in two dates difference, can be done like below:
import datetime
import math
issuedate = datetime(2019,5,9) #calculate the issue datetime
current_date = datetime.datetime.now() #calculate the current datetime
diff_date = current_date - issuedate #//calculate the date difference with time also
amount = fine #you want change
if diff_date.total_seconds() > 0.0: #its matching your condition
days = math.ceil(diff_date.total_seconds()/86400) #calculate days (in
one day 86400 seconds)
deductable_amount = round(amount,2)*days #calclulated fine for all days
Becuase if one second is more with the due date then we have to charge
With python as the easiest language available it is pretty easy to compare dates in python the python operators <
, >
and ==
fit wonderfully with datetime objects.
each of them has their own meaning in python:
<
means the date is earlier than the first
>
means the date comes later
==
means the date is same as the first
So, for your case:
import datetime
date = datetime.datetime(2000, 1, 1) # Replace with whatever you want
now = datetime.datetime.now() # You can even find the current date and time using this expression
if date < now:
print('past')
elif date > now:
print('future')
else:
print('present')
# This would print "past"
How would I compare two dates to see which is later, using Python?
For example, I want to check if the current date is past the last date in this list I am creating, of holiday dates, so that it will send an email automatically, telling the admin to update the holiday.txt file.
Use the datetime
method and the operator <
and its kin.
>>> from datetime import datetime, timedelta
>>> past = datetime.now() - timedelta(days=1)
>>> present = datetime.now()
>>> past < present
True
>>> datetime(3000, 1, 1) < present
False
>>> present - datetime(2000, 4, 4)
datetime.timedelta(4242, 75703, 762105)
datetime.date(2011, 1, 1) < datetime.date(2011, 1, 2)
will return True
.
datetime.date(2011, 1, 1) - datetime.date(2011, 1, 2)
will return datetime.timedelta(-1)
.
datetime.date(2011, 1, 1) + datetime.date(2011, 1, 2)
will return datetime.timedelta(1)
.
see the docs.
Use time
Let’s say you have the initial dates as strings like these:
date1 = "31/12/2015"
date2 = "01/01/2016"
You can do the following:
newdate1 = time.strptime(date1, "%d/%m/%Y")
newdate2 = time.strptime(date2, "%d/%m/%Y")
to convert them to python’s date format. Then, the comparison is obvious:
newdate1 > newdate2
will returnFalse
newdate1 < newdate2
will returnTrue
Other answers using datetime
and comparisons also work for time only, without a date.
For example, to check if right now it is more or less than 8:00 a.m., we can use:
import datetime
eight_am = datetime.time( 8,0,0 ) # Time, without a date
And later compare with:
datetime.datetime.now().time() > eight_am
which will return True
For calculating days in two dates difference, can be done like below:
import datetime
import math
issuedate = datetime(2019,5,9) #calculate the issue datetime
current_date = datetime.datetime.now() #calculate the current datetime
diff_date = current_date - issuedate #//calculate the date difference with time also
amount = fine #you want change
if diff_date.total_seconds() > 0.0: #its matching your condition
days = math.ceil(diff_date.total_seconds()/86400) #calculate days (in
one day 86400 seconds)
deductable_amount = round(amount,2)*days #calclulated fine for all days
Becuase if one second is more with the due date then we have to charge
With python as the easiest language available it is pretty easy to compare dates in python the python operators <
, >
and ==
fit wonderfully with datetime objects.
each of them has their own meaning in python:
<
means the date is earlier than the first>
means the date comes later==
means the date is same as the first
So, for your case:
import datetime
date = datetime.datetime(2000, 1, 1) # Replace with whatever you want
now = datetime.datetime.now() # You can even find the current date and time using this expression
if date < now:
print('past')
elif date > now:
print('future')
else:
print('present')
# This would print "past"