il tipo di oggetto "datetime.datetime" non ha attributo "datetime"


127

Ho ricevuto il seguente errore:

il tipo di oggetto "datetime.datetime" non ha attributo "datetime"

Sulla riga seguente:

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

Qualcuno conosce il motivo dell'errore?

Ho importato datetime con from datetime import datetime se questo aiuta

Grazie

Risposte:


225

Datetime è un modulo che consente la gestione di date, ore e datetimes (che sono tutti tipi di dati). Ciò significa chedatetime è sia un modulo di primo livello che un tipo all'interno di quel modulo. Questo è confusionario.

Il tuo errore è probabilmente basato sulla denominazione confusa del modulo e su ciò che tu o un modulo che stai utilizzando è già stato importato.

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

Tuttavia, se importi 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)

Ti ho il sospetto o di uno dei moduli che si sta utilizzando ha importato in questo modo: from datetime import datetime.


3
@jozzas ottima risposta. Ho avuto un problema con timedelta che è stato risolto con la tua soluzione. Txs.
— Luis Miguel

1
@ Jean, questa è la colpa di datetime che oscura il nome del proprio modulo con uno dei suoi nomi di classe, non di Python.
— Robino

85

Per Python 3.3

from datetime import datetime, timedelta
futuredate = datetime.now() + timedelta(days=10)

12
+1. Penso che questa dovrebbe essere la risposta corretta perché, per quanto ne so, import datetimecausa sempre problemi, quindi sono a favore di una soluzione che utilizzafrom datetime import datetime
— Jeff

14

Dovresti usare

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

Oppure cambia

from datetime import datetime

per

import datetime

11

Dovresti davvero importare il modulo nel suo alias .

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

Quanto sopra ha i seguenti vantaggi rispetto alle altre soluzioni:

  • Chiamare la variabile my_datetimeinvece di dateriduce la confusione poiché c'è già un datenel modulo datetime ( datetime.date).
  • Il modulo e la classe (entrambi chiamati datetime) non si nascondono a vicenda.

1

Se hai utilizzato:

from datetime import datetime

Quindi scrivi semplicemente il codice come:

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

Ma se hai usato:

import datetime

allora solo tu puoi scrivere:

date = datetime.datetime(int(2005), int(5), 1)

1

Ho trovato questo molto più semplice

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

1

Mi imbatto nello stesso errore forse hai già importato il modulo usando solo import datetimecosì cambia form datetime import datetime solo import datetime. Ha funzionato per me dopo averlo ripristinato.


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

6
Cerca di evitare risposte di solo codice. Puoi modificare il tuo post per aggiungere alcune spiegazioni e link per supportare il tuo codice.
— Tomerikoo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.