pythonpython-3.xdatetime

TypeError: descriptor 'date' for 'datetime.datetime' objects doesn't apply to a 'int' object


I've just encountered this issue, and couldn't find a reasonable answer for it on the front page of Google. It's similar to this question asked in 2011, but for a newer version of Python, which results in a different error message.

What is causing these TypeErrors?

Integers

import datetime
my_date = datetime.datetime.date(2021, 3, 2) 

Results in the error:

TypeError: descriptor 'date' for 'datetime.datetime' objects doesn't apply to a 'int' object

Strings

Similarly, replacing the integers with strings also gives the same error:

import datetime
my_date = datetime.datetime.date("2021", "3", "2") 

Gives:

TypeError: descriptor 'date' for 'datetime.datetime' objects doesn't apply to a 'str' object

Lists

And using a list gives the same error:

import datetime
my_date = datetime.datetime.date([2021, 3, 2]) 

Results in:

TypeError: descriptor 'date' for 'datetime.datetime' objects doesn't apply to a 'list' object

Similarly, using from datetime import datetime and datetime.date will result in the following error messages respectively:

TypeError: descriptor 'date' for 'datetime' objects doesn't apply to a 'int' object
TypeError: descriptor 'date' for 'datetime' objects doesn't apply to a 'str' object
TypeError: descriptor 'date' for 'datetime' objects doesn't apply to a 'list' object

Solution

  • Solution:

    import datetime
    my_date = datetime.date(2021, 3, 2)
    

    or

    from datetime import date
    my_date = date(2021, 3, 2)
    

    Why?

    The issue is that datetime.datetime.date() is a method on a datetime.datetime object. We were confusing the datetime module with the datetime.datetime class.

    What we're really looking for is the datetime.date() constructor.