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.