El objeto de tipo 'datetime.datetime' no tiene el atributo 'datetime'

126

Recibí el siguiente error:

El objeto de tipo 'datetime.datetime' no tiene el atributo 'datetime'

En la siguiente línea:

date = datetime.datetime(int(year), int(month), 1)

¿Alguien sabe el motivo del error?

Importé datetime con from datetime import datetimesi eso ayuda

Gracias

Chris Frank
fuente

Respuestas:

225

Datetime es un módulo que permite el manejo de fechas, horas y horas de fecha (todos los cuales son tipos de datos). Esto significa que datetimees tanto un módulo de nivel superior como un tipo dentro de ese módulo. Esto es confuso.

Su error probablemente se basa en la confusa denominación del módulo y lo que usted o un módulo que está utilizando ya ha importado.

>>> import datetime
>>> datetime
<module 'datetime' from '/usr/lib/python2.6/lib-dynload/datetime.so'>
>>> datetime.datetime(2001,5,1)
datetime.datetime(2001, 5, 1, 0, 0)

Pero, si importa datetime.datetime:

>>> from datetime import datetime
>>> datetime
<type 'datetime.datetime'>
>>> datetime.datetime(2001,5,1) # You shouldn't expect this to work 
                                # as you imported the type, not the module
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: type object 'datetime.datetime' has no attribute 'datetime'
>>> datetime(2001,5,1)
datetime.datetime(2001, 5, 1, 0, 0)

Sospecho que usted o uno de los módulos que está utilizando ha importado como esto: from datetime import datetime.

John Lyon
fuente
3
@jozzas gran respuesta. Tuve un problema con timedelta que se resolvió con tu solución. Txs.
Luis Miguel
1
@Jean, esto es culpa de fecha y hora sombreando el nombre de su propio módulo con uno de sus nombres de clase, no de Python.
Robino
85

Para python 3.3

from datetime import datetime, timedelta
futuredate = datetime.now() + timedelta(days=10)
RouR
fuente
12
+1. Creo que esto debería ser la respuesta correcta, porque por lo que yo sé, import datetimesiempre causa problemas, por lo que estoy a favor de una solución que usosfrom datetime import datetime
Jeff
14

Deberías usar

date = datetime(int(year), int(month), 1)

O cambiar

from datetime import datetime

a

import datetime
waitingkuo
fuente
11

Realmente debería importar el módulo en su propio alias .

import datetime as dt
my_datetime = dt.datetime(year, month, day)

Lo anterior tiene los siguientes beneficios sobre las otras soluciones:

  • Llamar a la variable en my_datetimelugar de datereducir la confusión ya que ya hay un dateen el módulo de fecha y hora ( datetime.date).
  • El módulo y la clase (ambos llamados datetime) no se sombrean entre sí.
Robino
fuente
1

Si has usado:

from datetime import datetime

Luego simplemente escriba el código como:

date = datetime(int(year), int(month), 1)

Pero si has usado:

import datetime

entonces solo tú puedes escribir:

date = datetime.datetime(int(2005), int(5), 1)
M. Paul
fuente
1

Encontré que esto es mucho más fácil

from dateutil import relativedelta
relativedelta.relativedelta(end_time,start_time).seconds
Kamaldeep Singh
fuente
1

Me encuentro con el mismo error, tal vez ya haya importado el módulo utilizando solo, import datetimeasí que cambie form datetime import datetimea solo import datetime. Funcionó para mí después de que lo volví a cambiar.

Audrey Mengue
fuente
-2
from datetime import datetime
import time
from calendar import timegm
d = datetime.utcnow()
d = d.strftime("%Y-%m-%dT%H:%M:%S.%fZ")
utc_time = time.strptime(d,"%Y-%m-%dT%H:%M:%S.%fZ")
epoch_time = timegm(utc_time)
Jay Agrawal
fuente
66
Intenta evitar respuestas de solo código. Puede editar su publicación para agregar algunas explicaciones y enlaces para respaldar su código.
Tomerikoo