The above displays some of the common methods of the date class. More information about the date class can be found here.
A lot of what we want to do today is look at how to take some of these methods and get to a point where we can compare dates.
Comparing dates
We want to write a helper method to check if a given date in the format YYYY-MM-DD is before today. Exit the iPython kernel and add the following code to our src/datetimes.py file:
from datetime import date
def is_date_before_today(date_str: str):
"""Check if date is before today
Args:
date_str (str): String of a date to pass
Returns:
bool: Value of if date is before today
"""
try:
date_obj = date.fromisoformat(date_str)
return date_obj < date.today()
except Exception:
return False
print(is_date_before_today("2019-01-01"))
print(is_date_before_today("2022-01-01"))
print(is_date_before_today("2021-08-03"))
print(is_date_before_today("2021-08-04"))
We can use the > and < operators to compare dates.
If we now run python src/datetimes.py we should see the following output:
We can see the output reflects a date string that is before today (with today returning False).
Working with now
The datetime module from the datetime library also has a now method that returns the current date and time.
We can use this in combination with strftime to get the current date and time in a string format. Update the code to the following:
from datetime import date, datetime
def is_date_before_today(date_str: str):
"""Check if date is before today
Args:
date_str (str): String of a date to pass
Returns:
bool: Value of if date is before today
"""
try:
date_obj = date.fromisoformat(date_str)
return date_obj < date.today()
except Exception:
return False
now = datetime.now()
now_str = now.strftime('%Y-%m-%d')
print(now_str)
print(is_date_before_today(now_str))
Running python src/datetimes.py will output 2021-08-04 and False respectively.
To learn more about strftime, there is a great blog post here.
Adding and subtracting dates
We can use datetime.timedelta to add and subtract dates.
Update our code to the following:
from datetime import date, datetime, timedelta
def is_date_before_today(date_str: str):
"""Check if date is before today
Args:
date_str (str): String of a date to pass
Returns:
bool: Value of if date is before today
"""
try:
date_obj = date.fromisoformat(date_str)
return date_obj < date.today()
except Exception:
return False
now = datetime.now()
now_str = now.strftime('%Y-%m-%d')
print(now_str)
print(is_date_before_today(now_str))
now_subtract_one_day = now - timedelta(days=2)
now_subtract_one_day_str = now_subtract_one_day.strftime('%Y-%m-%d')
print(now_subtract_one_day_str)
print(is_date_before_today(now_subtract_one_day_str))
now_add_one_day = now + timedelta(days=1)
now_add_one_day_str = now_add_one_day.strftime('%Y-%m-%d')
print(now_add_one_day_str)
print(is_date_before_today(now_add_one_day_str))
Once again we will python src/datetimes.py which will output the following:
Awesome, now we know how to add and subtract from dates!
Summary
Today's post demonstrated how to use the datetime module to compare times and determine the current date.
Dates and times are incredibly important to any temporal applications, and the following posts will spend some time looking further into this and how to write tests for this form of functionality.