Skip to main content

How to Check for datetime Objects in Python

This guide explains how to correctly check if a variable in Python holds a datetime object (or a date object). We'll focus on using the isinstance() function, the recommended approach, and briefly cover using type() for comparison. Understanding these techniques is crucial for type checking and ensuring your code interacts with date and time values correctly.

The isinstance() function is the standard and most reliable way to check if a variable is an instance of a particular class (or a subclass of that class). For datetime objects:

from datetime import datetime

today = datetime.today()
print(today) # Output: 2024-10-27 17:19:12.678753

if isinstance(today, datetime):
print('variable is a datetime object')
else:
print('variable is NOT a datetime object')
  • The isinstance checks if the variable today is an instance of the datetime class.

Distinguishing Between date and datetime

The datetime module contains two main classes:

  • datetime: Represents a specific point in time, including date and time components (year, month, day, hour, minute, second, microsecond).
  • date: Represents a date only (year, month, day).

datetime is a subclass of date. This means that a datetime object is also considered a date object by isinstance(). However, the reverse is not true:

from datetime import datetime, date

d = date(2022, 9, 24)
dt = datetime.today()

print(isinstance(dt, datetime)) # Output: True
print(isinstance(dt, date)) # Output: True (datetime is a subclass of date)
print(isinstance(d, datetime)) # Output: False (date is NOT a datetime)
print(isinstance(d, date)) # Output: True
  • If you have a variable which stores the date class object, you can check it by passing date to isinstance() method.

Using type() for Type Checking (Less Common)

You can use the type() function to get the exact type of an object:

from datetime import datetime, date

d = date(2022, 9, 24)
print(type(d) is date) # Output: True (exact type match)
print(type(d) is datetime) # Output: False (not the exact type)

today = datetime.today()
print(type(today) is datetime) # Output: True (exact type match)
print(type(today) is date) # Output: False
  • type(d) is date: This checks if the exact type of d is date.
  • type(today) is datetime: This checks if the exact type of today is datetime.
note

Why isinstance() is generally preferred:

  • Handles Inheritance: isinstance() correctly handles inheritance. If you have a class that inherits from datetime, isinstance() will recognize it as a datetime object. type() won't.
  • More Flexible: isinstance() is more flexible and generally aligns better with Python's duck typing philosophy.