2012-10-16 35 views

risposta

110

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

Il tuo errore si basa probabilmente sulla confusione del nome del modulo e su ciò che tu o un modulo che state 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) 

Ma, se 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) 

voi o uno dei moduli che si sta utilizzando è importata Ho il sospetto che in questo modo: from datetime import datetime.

+2

Grazie! Ha funzionato perfettamente –

+2

Grazie! È una piccola cosa da trascurare, ma difficile da trovare. – Prateek

+2

@jozzas ottima risposta. Ho avuto un problema con timedelta che è stato risolto con la tua soluzione. Txs. –

5

Si dovrebbe usare

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

O modificare

from datetime import datetime 

a

import datetime 
+0

Grazie! –

47

per Python 3,3

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

+1. Penso che questa dovrebbe essere la risposta corretta perché, per quanto ne so, importare datetime causa sempre problemi, quindi sono a favore di una soluzione che usa 'from datetime import datetime' – jeff

0

Se avete usato:

from datetime import datetime 

Poi basta scrivere il codice come:

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

Ma se si è utilizzato:

import datetime 

solo allora si può scrivere:

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

Si dovrebbe davvero importare e modulo nel proprio alias .

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

ha il sopra i seguenti vantaggi sulle altre soluzioni:

  • Richiamo della variabile my_datetime anziché date riduce confusione, poiché v'è già un date nel modulo datetime (datetime.date).
  • Il modulo e la classe (entrambi chiamati datetime) non si ombreggiano a vicenda.
Problemi correlati