AttributeError: 'datetime' module has no attribute 'strptime'
Question:
Here is my Transaction
class:
class Transaction(object):
def __init__(self, company, num, price, date, is_buy):
self.company = company
self.num = num
self.price = price
self.date = datetime.strptime(date, "%Y-%m-%d")
self.is_buy = is_buy
And when I’m trying to run the date
function:
tr = Transaction('AAPL', 600, '2013-10-25')
print tr.date
I’m getting the following error:
self.date = datetime.strptime(self.d, "%Y-%m-%d")
AttributeError: 'module' object has no attribute 'strptime'
How can I fix that?
Answers:
Use the correct call: strptime
is a classmethod of the datetime.datetime
class, it’s not a function in the datetime
module.
self.date = datetime.datetime.strptime(self.d, "%Y-%m-%d")
As mentioned by Jon Clements in the comments, some people do from datetime import datetime
, which would bind the datetime
name to the datetime
class, and make your initial code work.
To identify which case you’re facing (in the future), look at your import statements
import datetime
: that’s the module (that’s what you have right now).
from datetime import datetime
: that’s the class.
If I had to guess, you did this:
import datetime
at the top of your code. This means that you have to do this:
datetime.datetime.strptime(date, "%Y-%m-%d")
to access the strptime
method. Or, you could change the import statement to this:
from datetime import datetime
and access it as you are.
The people who made the datetime
module also named their class datetime
:
#module class method
datetime.datetime.strptime(date, "%Y-%m-%d")
I got the same problem and it is not the solution that you told. So I changed the “from datetime import datetime” to “import datetime”. After that with
the help of “datetime.datetime” I can get the whole modules correctly. I guess this is the correct answer to that question.
Values may differ depending on usage.
import datetime
date = datetime.datetime.now()
date.strftime('%Y-%m-%d') # date variable type is datetime
The value of the date variable must be a string::
date = '2021-09-06'
datetime.datetime.strptime(date, "%Y-%m-%d")
str(datetime.datetime.strptime(date, "%Y-%m-%d")) # show differently
The solutions mentioned by the others are correct. But for me, it was a problem with another library importing datetime module for me and overriding the datetime class I was importing.
an example with tsai library:
from datetime import datetime
from tsai.all import *
This will give you the error: 'module' object has no attribute 'strptime'
.
In this case, just flip the order of imports or just don’t import everything (even if the documentation does that) :
from tsai.all import *
from datetime import datetime
Here is my Transaction
class:
class Transaction(object):
def __init__(self, company, num, price, date, is_buy):
self.company = company
self.num = num
self.price = price
self.date = datetime.strptime(date, "%Y-%m-%d")
self.is_buy = is_buy
And when I’m trying to run the date
function:
tr = Transaction('AAPL', 600, '2013-10-25')
print tr.date
I’m getting the following error:
self.date = datetime.strptime(self.d, "%Y-%m-%d")
AttributeError: 'module' object has no attribute 'strptime'
How can I fix that?
Use the correct call: strptime
is a classmethod of the datetime.datetime
class, it’s not a function in the datetime
module.
self.date = datetime.datetime.strptime(self.d, "%Y-%m-%d")
As mentioned by Jon Clements in the comments, some people do from datetime import datetime
, which would bind the datetime
name to the datetime
class, and make your initial code work.
To identify which case you’re facing (in the future), look at your import statements
import datetime
: that’s the module (that’s what you have right now).from datetime import datetime
: that’s the class.
If I had to guess, you did this:
import datetime
at the top of your code. This means that you have to do this:
datetime.datetime.strptime(date, "%Y-%m-%d")
to access the strptime
method. Or, you could change the import statement to this:
from datetime import datetime
and access it as you are.
The people who made the datetime
module also named their class datetime
:
#module class method
datetime.datetime.strptime(date, "%Y-%m-%d")
I got the same problem and it is not the solution that you told. So I changed the “from datetime import datetime” to “import datetime”. After that with
the help of “datetime.datetime” I can get the whole modules correctly. I guess this is the correct answer to that question.
Values may differ depending on usage.
import datetime
date = datetime.datetime.now()
date.strftime('%Y-%m-%d') # date variable type is datetime
The value of the date variable must be a string::
date = '2021-09-06'
datetime.datetime.strptime(date, "%Y-%m-%d")
str(datetime.datetime.strptime(date, "%Y-%m-%d")) # show differently
The solutions mentioned by the others are correct. But for me, it was a problem with another library importing datetime module for me and overriding the datetime class I was importing.
an example with tsai library:
from datetime import datetime
from tsai.all import *
This will give you the error: 'module' object has no attribute 'strptime'
.
In this case, just flip the order of imports or just don’t import everything (even if the documentation does that) :
from tsai.all import *
from datetime import datetime