How to Solve Python AttributeError: module ‘datetime’ has no attribute ‘combine’

by | Programming, Python, Tips

This error occurs when you import the datetime module and try to call the combine() method on the imported module. You can solve this error by importing the datetime class using from datetime import datetime or accessing the class method using

datetime.datetime.combine()

This tutorial will go through the error and how to solve it with code examples.


AttributeError: module ‘datetime’ has no attribute ‘combine’

AttributeError occurs in a Python program when we try to access an attribute (method or property) that does not exist for a particular object. datetime is a built-in Python module that supplies classes for manipulating dates and times. One of the classes in datetime is called datetime. It can be unclear when both the module and one of the classes share the same name. If you use the import syntax:

import datetime

You are importing the datetime module, not the datetime class. We can verify that we are importing the module using the type() function:

import datetime

print(type(datetime))
<class 'module'>

We can check what names are under datetime using dir() as follows:

import datetime

attributes = dir(datetime)

print('combine' in attributes)

In the above code, we assign the list of attributes returned by dir() to the variable name attributes. We then check for the combine() attribute in the list using the in operator. When we run this code, we see it returns False.

False

However, if we import the datetime class using the from keyword and call dir(), we will see now as an attribute of the class. We can check for now in the list of attributes as follows:

from datetime import datetime

attributes = dir(datetime)

print('combine' in attributes)
True

Example

Consider the following example, where we want to get create a datetime object from a time and a date using the combine() method.

import datetime

time_obj = datetime.time(7, 30)
date_obj = datetime.datetime(2021, 4, 20)

combined = datetime.combine(date_obj, time_obj)

print(combined)

The combine() returns a datetime object whose date component is equal to the provided date object and whose time component is equal to the provided time object.

Let’s run the code to see what happens:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Input In [3], in <cell line: 6>()
      3 time_obj = datetime.time(7, 30)
      4 date_obj = datetime.datetime(2021, 4, 20)
----> 6 combined = datetime.combine(date_obj, time_obj)
      8 print(combined)

AttributeError: module 'datetime' has no attribute 'combine'

The error occurs because we imported the datetime module and tried to call the combine() method on the module, but combine() is an attribute of the datetime class, not the module.

Solution #1: Use the from keyword

We can solve this error by importing the datetime class using the from keyword. Let’s look at the revised code:

from datetime import datetime, time

time_obj = time(7, 30)
date_obj = datetime(2021, 4, 20)

combined = datetime.combine(date_obj, time_obj)

print(combined)

Let’s run the code to see the result:

2021-04-20 07:30:00

We successfully combined the date and time objects into a datetime object.

Solution #2: Use datetime.datetime

We can also solve this error by importing the module and then accessing the class attribute using datetime.datetime, then we can call the combine() method. Let’s look at the revised code:

import datetime

time_obj = datetime.time(7, 30)
date_obj = datetime.datetime(2021, 4, 20)

combined = datetime.datetime.combine(date_obj, time_obj)

print(combined)

Let’s run the code to see the result:

2021-04-20 07:30:00

We successfully combined the date and time objects into a datetime object.

Summary

Congratulations on reading to the end of this tutorial! Remember that from datetime import datetime imports the datetime class and import datetime imports the datetime module.

For further reading on AttributeErrors involving datetime, go to the articles:

To learn more about Python for data science and machine learning, go to the online courses page on Python for the most comprehensive courses available.

Have fun and happy researching!

Research Scientist at Moogsoft | + posts

Suf is a research scientist at Moogsoft, specializing in Natural Language Processing and Complex Networks. Previously he was a Postdoctoral Research Fellow in Data Science working on adaptations of cutting-edge physics analysis techniques to data-intensive problems in industry. In another life, he was an experimental particle physicist working on the ATLAS Experiment of the Large Hadron Collider. His passion is to share his experience as an academic moving into industry while continuing to pursue research. Find out more about the creator of the Research Scientist Pod here and sign up to the mailing list here!

Follow the Research Scientist Pod on Social media!