Last updated: Apr 8, 2024
Reading timeΒ·11 min
The error "AttributeError module 'datetime' has no attribute 'strptime'"
occurs when we try to call the strptime
method directly on the datetime
module.
To solve the error, use the following import import datetime
and call the
strptime
method as datetime.datetime.strptime(...)
.
Here is an example of how the error occurs.
import datetime # βοΈ AttributeError: module 'datetime' has no attribute 'strptime' dt = datetime.strptime("21/11/22 09:30", "%d/%m/%y %H:%M") print(dt)
strftime
", scroll down to the next subheading.The issue is that we are trying to call the strptime
method directly on the
datetime
module.
strptime
method on the datetime
class insteadTo solve the error, call the strptime
method on the datetime
class instead.
import datetime dt = datetime.datetime.strptime( "21/11/22 09:30", "%d/%m/%y %H:%M" ) print(dt) # ποΈ 2022-11-21 09:30:00
datetime.py
as that would shadow the official datetime
module.datetime
class directlyAlternatively, you can change your import statement to import the datetime
class from the datetime
module to not have to type datetime.datetime
which
looks quite confusing.
from datetime import datetime dt = datetime.strptime("21/11/22 09:30", "%d/%m/%y %H:%M") print(dt) # ποΈ 2022-11-21 09:30:00
We imported the datetime class from the datetime module and called the strptime() method on the class.
It is quite confusing that there is a class named datetime
in the datetime
module.
The following import statement imports the datetime
class.
from datetime import datetime # ποΈ <class 'datetime.datetime'> print(datetime)
The following import statement imports the entire datetime
module.
import datetime # ποΈ <module 'datetime' from '/home/borislav/anaconda3/lib/python3.9/datetime.py'> print(datetime) # ποΈ <class 'datetime.datetime'> print(datetime.datetime)
You can make your code a bit easier to read by using an alias in your import statement.
# ποΈ alias datetime class to dt from datetime import datetime as dt result = dt.strptime("21/11/22 09:30", "%d/%m/%y %H:%M") print(result) # ποΈ 2022-11-21 09:30:00
We aliased the datetime
class to dt
, so you would call the strptime
method
as dt.strptime()
instead of datetime.strptime()
.
The best way to start debugging is to call the dir()
function passing it the
imported module.
import datetime """ [ 'MAXYEAR', 'MINYEAR', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'date', 'datetime', 'datetime_CAPI', 'sys', 'time', 'timedelta', 'timezone', 'tzinfo' ] """ print(dir(datetime))
If you pass a module object to the dir() function, it returns a list of names of the module's attributes.
We can see that the datetime
module has no attribute named strptime
, so it
must be an attribute in one of the module's classes.
We can also see that the datetime
module has an attribute datetime
, which is
what we used to successfully call the strptime()
method.
If you import the datetime
class from the datetime
module and pass it to the
dir()
function, you will see the strptime
method in the list of attributes.
from datetime import datetime # ποΈ [... 'strptime', ...] print(dir(datetime))
If you got the error "AttributeError: partially initialized module 'datetime'
has no attribute 'strptime' (most likely due to a circular import)", there is a
file called datetime.py
in your local codebase.
To solve the error, make sure to not use the names of built-in or remote
modules, e.g. datetime.py
, for your local files.
The error "AttributeError module 'datetime' has no attribute 'strftime'"
occurs when we try to call the strftime
method directly on the datetime
module.
To solve the error, create a datetime
object and call the strftime
method
on the object instead.
Here is an example of how the error occurs.
import datetime # βοΈ AttributeError: module 'datetime' has no attribute 'strftime' print(datetime.strftime("%d/%m/%y"))
The issue in the code sample is that we are trying to call the strftime
method
directly on the datetime
module.
To solve the error, we have to create a datetime
object first and call the
strftime
method on the object.
import datetime d = datetime.datetime(2022, 11, 24, 9, 30, 0) # ποΈ 24/11/22 print(d.strftime("%d/%m/%y")) # ποΈ οΈThursday, 24. November 2022 09:30AM print(d.strftime("%A, %d. %B %Y %I:%M%p")) # ποΈ Saturday, 14. May 2022 11:40AM d2 = datetime.datetime.now() # ποΈ current date print(d2.strftime("%A, %d. %B %Y %I:%M%p"))
datetime.py
as that would shadow the official datetime
module.We imported the datetime module and instantiated the datetime class.
The datetime
class has a
strftime
method which we can use to get a string representation of the date and time,
controlled by an explicit format string.
It is quite confusing that the datetime
module has a datetime
class.
An alternative to chaining datetime.datetime
, is to import the class from the
module.
from datetime import datetime d = datetime(2022, 11, 24, 9, 30, 0) # ποΈ 24/11/22 print(d.strftime("%d/%m/%y")) # ποΈ οΈThursday, 24. November 2022 09:30AM print(d.strftime("%A, %d. %B %Y %I:%M%p")) # ποΈ Saturday, 14. May 2022 11:40AM d2 = datetime.now() print(d2.strftime("%A, %d. %B %Y %I:%M%p"))
We imported the datetime
class from the datetime
module, so we don't have to
use datetime.datetime
when instantiating the class.
You can also use an alias in your import statement.
from datetime import datetime as dt d = dt(2022, 11, 24, 9, 30, 0) # ποΈ 24/11/22 print(d.strftime("%d/%m/%y")) # ποΈ οΈThursday, 24. November 2022 09:30AM print(d.strftime("%A, %d. %B %Y %I:%M%p")) # ποΈ Saturday, 14. May 2022 11:40AM d2 = dt.now() print(d2.strftime("%A, %d. %B %Y %I:%M%p"))
We aliased the datetime
class to dt
, so we can access methods on the class
as dt.now()
instead of datetime.now()
.
The best way to start debugging is to call the dir()
function passing it the
imported module.
import datetime """ [ 'MAXYEAR', 'MINYEAR', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'date', 'datetime', 'datetime_CAPI', 'sys', 'time', 'timedelta', 'timezone', 'tzinfo' ] """ print(dir(datetime))
If you pass a module object to the dir() function, it returns a list of names of the module's attributes.
We can see that the datetime
module has no attribute named strftime
, so it
must be an attribute in one of the module's classes.
However, if we pass the datetime
object to the dir()
function, we can see
that it has an attribute strftime
.
import datetime d = datetime.datetime(2022, 11, 24, 9, 30, 0) # [... 'strftime' ...] print(dir(d))
The dir()
function is very useful when you need to look at what exactly you
are importing and which attributes are available on the imported module.
The error "AttributeError module 'datetime' has no attribute 'today'" occurs
when we try to call the today
method directly on the datetime
module.
To solve the error, use the following import import datetime
and call the
today
method as datetime.date.today()
.
Here is an example of how the error occurs.
import datetime # βοΈ AttributeError: module 'datetime' has no attribute 'today' print(datetime.today())
The issue in the code sample is that we are trying to call the today
method
directly on the datetime
module.
To solve the error, call the today
method on the date
class instead.
# ποΈ 2022-05-14 print(datetime.date.today()) # ποΈ 2022-05-14 13:45:57.409176 print(datetime.datetime.today())
When called on a date object, the today method returns the current local date.
When called on a
datetime
object, the
today
method returns the local datetime
.
datetime.py
as that would shadow the official datetime
module.Alternatively, you can change your import statement to import the datetime
class from the datetime
module to not have to type datetime.datetime
which
looks quite confusing.
from datetime import datetime, date # ποΈ 2022-05-14 print(date.today()) # ποΈ 2022-05-14 13:45:57.409176 print(datetime.today())
We imported the
datetime
and date
classes from the datetime
module and called the today()
method on the classes.
It is quite confusing that there is a class named datetime
in the datetime
module.
You can make your code a bit easier to read by using an alias in your import statement.
from datetime import datetime as dt, date # ποΈ 2022-05-14 print(date.today()) # ποΈ 2022-05-14 13:45:57.409176 print(dt.today())
We aliased the datetime
class to dt
, so you would call the today
method as
dt.today()
instead of datetime.today()
.
The best way to start debugging is to call the dir()
function passing it the
imported module.
import datetime """ [ 'MAXYEAR', 'MINYEAR', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'date', 'datetime', 'datetime_CAPI', 'sys', 'time', 'timedelta', 'timezone', 'tzinfo' ] """ print(dir(datetime))
If you pass a module object to the dir() function, it returns a list of names of the module's attributes.
We can see that the datetime
module has no attribute named today
, so it must
be an attribute in one of the module's classes.
We can also see that the datetime
module has an attribute datetime
, which is
what we used to successfully call the today()
method.
If you import the datetime
class from the datetime
module and pass it to the
dir()
function, you will see the today
method in the list of attributes.
from datetime import datetime, date # ποΈ [... 'today' ...] print(dir(datetime)) # ποΈ [... 'today' ...] print(dir(date))
If you got the error "AttributeError: partially initialized module 'datetime'
has no attribute 'today' (most likely due to a circular import)", there is a
file called datetime.py
in your local codebase.
To solve the error, make sure to not use the names of built-in or remote
modules, e.g. datetime.py
, for your local files.
The error "AttributeError module 'datetime' has no attribute 'fromtimestamp'"
occurs when we call the fromtimestamp
method on the datetime
module.
To solve the error, use the following import import datetime
and call the
method as datetime.datetime.fromtimestamp(...)
.
Here is an example of how the error occurs.
import time import datetime # βοΈ AttributeError: module 'datetime' has no attribute 'fromtimestamp' today = datetime.fromtimestamp(time.time()) print(today)
The issue in the code sample is that we are trying to call the
fromtimestamp method directly on
the datetime
module.
To solve the error, call the fromtimestamp
method on the datetime
class
instead.
import time import datetime today = datetime.datetime.fromtimestamp(time.time()) # ποΈ 2022-05-14 13:16:59.426594 print(today)
datetime.py
as that would shadow the official datetime
module.Alternatively, you can change your import statement to import the datetime
class from the datetime
module to not have to type datetime.datetime
which
looks quite confusing.
import time from datetime import datetime today = datetime.fromtimestamp(time.time()) # ποΈ 2022-05-14 13:16:59.426594 print(today)
We imported the datetime class from the datetime module and called the fromtimestamp method on the class.
It is quite confusing that there is a class named datetime
in the datetime
module.
You can make your code a bit easier to read by using an alias in your import statement.
import time from datetime import datetime as dt today = dt.fromtimestamp(time.time()) # ποΈ 2022-05-14 13:16:59.426594 print(today)
We aliased the datetime
class to dt
, so you would call the fromtimestamp
method as dt.fromtimestamp()
instead of datetime.fromtimestamp()
.
You can also pass a tz
keyword argument to the method, to convert the
timestamp to the specific time zone.
import time from datetime import datetime as dt, timezone today = dt.fromtimestamp(time.time(), tz=timezone.utc) # ποΈ 2022-05-14 10:21:52.540533+00:00 print(today)
The best way to start debugging is to call the dir()
function passing it the
imported module.
import datetime """ [ 'MAXYEAR', 'MINYEAR', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'date', 'datetime', 'datetime_CAPI', 'sys', 'time', 'timedelta', 'timezone', 'tzinfo' ] """ print(dir(datetime))
If you pass a module object to the dir() function, it returns a list of names of the module's attributes.
We can see that the datetime
module has no attribute named fromtimestamp
, so
it must be an attribute in one of the module's classes.
We can also see that the datetime
module has an attribute datetime
, which is
what we used to successfully call the fromtimestamp()
method.
If you import the datetime
class from the datetime
module and pass it to the
dir()
function, you will see the fromtimestamp
method in the list of
attributes.
from datetime import datetime # ποΈ [... 'fromtimestamp', ...] print(dir(datetime))
If you got the error "AttributeError: partially initialized module 'datetime'
has no attribute 'fromtimestamp' (most likely due to a circular import)", there
is a file called datetime.py
in your local codebase.
To solve the error, make sure to not use the names of built-in or remote
modules, e.g. datetime.py
, for your local files.
The error "AttributeError module 'datetime' has no attribute 'now'" occurs
when we try to call the now
method directly on the datetime
module.
To solve the error, use the following import import datetime
and call the
now
method as datetime.datetime.now()
.
Here is an example of how the error occurs.
import datetime # βοΈ AttributeError: module 'datetime' has no attribute 'now' print(datetime.now())
The issue in the code sample is that we are trying to call the now
method
directly on the datetime
module.
To solve the error, call the now
method on the datetime
class instead.
import datetime # ποΈ 2022-05-14 12:48:41.270852 print(datetime.datetime.now())
datetime.py
as that would shadow the official datetime
module.Alternatively, you can change your import statement to import the datetime
class from the datetime
module to not have to type datetime.datetime
which
looks quite confusing.
from datetime import datetime # ποΈ 2022-05-14 12:48:41.270852 print(datetime.now())
We imported the datetime class from the datetime module and called the now method on the class.
It is quite confusing that there is a class named datetime
in the datetime
module.
You can get around this by using an alias in your import statement.
# ποΈ alias datetime class to dt from datetime import datetime as dt # ποΈ 2022-05-14 12:48:41.270852 print(dt.now())
We aliased the datetime
class to dt
, so you would call the now
method as
dt.now()
instead of datetime.now()
.
The best way to start debugging is to call the dir()
function passing it the
imported module.
import datetime """ [ 'MAXYEAR', 'MINYEAR', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'date', 'datetime', 'datetime_CAPI', 'sys', 'time', 'timedelta', 'timezone', 'tzinfo' ] """ print(dir(datetime))
If you pass a module object to the dir() function, it returns a list of names of the module's attributes.
We can see that the datetime
module has no attribute named now
, so it must
be an attribute in one of the module's classes.
We can also see that the datetime
module has an attribute datetime
, which is
what we used to successfully call the now()
method.
If you import the datetime
class from the datetime
module and pass it to the
dir()
function, you will see the now
method in the list of attributes.
from datetime import datetime # ποΈ [... 'now', ...] print(dir(datetime))
If you got the error "AttributeError: partially initialized module 'datetime'
has no attribute 'now' (most likely due to a circular import)", there is a file
called datetime.py
in your local codebase.
To solve the error, make sure to not use the names of built-in or remote
modules, e.g. datetime.py
, for your local files.