o objeto de tipo 'datetime.datetime' não tem atributo 'datetime'

126

Eu recebi o seguinte erro:

o objeto de tipo 'datetime.datetime' não tem atributo 'datetime'

Na seguinte linha:

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

Alguém sabe o motivo do erro?

Importei datetime com from datetime import datetimese isso ajuda

obrigado

Chris Frank
fonte

Respostas:

225

Datetime é um módulo que permite a manipulação de datas, horas e horas (todos os tipos de dados). Isso significa que datetimeé um módulo de nível superior e também um tipo dentro desse módulo. Isso é confuso.

Seu erro provavelmente é baseado na nomenclatura confusa do módulo e o que você ou um módulo que você está usando já importou.

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

Mas, se você importar 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)

Eu suspeito que você ou um dos módulos que você está usando tem importado como este: from datetime import datetime.

John Lyon
fonte
3
@jozzas ótima resposta. Eu tive um problema com o timedelta que foi resolvido com sua solução. Txs.
Luis Miguel
1
@ Jean: é culpa da data e hora sombrear o nome de seu próprio módulo com um de seus nomes de classe, não o de python.
Robino
85

Para python 3.3

from datetime import datetime, timedelta
futuredate = datetime.now() + timedelta(days=10)
RouR
fonte
12
+1. Eu acho que isso deve ser a resposta correta, porque, tanto quanto eu sei, import datetimesempre causa problemas, então eu sou a favor de uma solução que usosfrom datetime import datetime
jeff
14

Você deveria usar

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

Ou mudar

from datetime import datetime

para

import datetime
waitingkuo
fonte
11

Você realmente deve importar o módulo em seu próprio alias .

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

O acima tem os seguintes benefícios sobre as outras soluções:

  • Chamar a variável em my_datetimevez de datereduzir a confusão, pois já existe um dateno módulo datetime ( datetime.date).
  • O módulo e a classe (ambos chamados datetime) não se sombreiam.
Robino
fonte
1

Se você já usou:

from datetime import datetime

Em seguida, basta escrever o código como:

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

Mas se você já usou:

import datetime

somente você pode escrever:

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

Eu achei isso muito mais fácil

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

Eu corro para o mesmo erro, talvez você já tenha importado o módulo usando apenas import datetimepara alterar form datetime import datetimepara somente import datetime. Funcionou para mim depois que eu mudei de volta.

Audrey Mengue
fonte
-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
fonte
6
Tente evitar respostas somente de código. Você pode editar sua postagem para adicionar algumas explicações e links para dar suporte ao seu código.
Tomerikoo 30/03