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

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.


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)

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

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í.

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)

1

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

from dateutil import relativedelta
relativedelta.relativedelta(end_time,start_time).seconds

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.


-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)

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.