l'objet de type 'datetime.datetime' n'a pas d'attribut 'datetime'


127

J'ai eu l'erreur suivante:

l'objet de type 'datetime.datetime' n'a pas d'attribut 'datetime'

Sur la ligne suivante:

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

Quelqu'un connaît-il la raison de l'erreur?

J'ai importé datetime avec from datetime import datetimesi cela aide

Merci

Réponses:


225

Datetime est un module qui permet de gérer les dates, heures et datetimes (qui sont tous des types de données). Cela signifie qu'il datetimes'agit à la fois d'un module de niveau supérieur et d'un type dans ce module. Ceci est déroutant.

Votre erreur est probablement basée sur la dénomination confuse du module et sur ce que vous ou un module que vous utilisez avez déjà importé.

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

Mais, si vous importez 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)

Je suppose que vous ou l' un des modules que vous utilisez a importé comme ceci: from datetime import datetime.


3
@jozzas excellente réponse. J'ai eu un problème avec timedelta qui a été résolu avec votre solution. Txs.
Luis Miguel

1
@Jean c'est la faute de datetime occultant le nom de son propre module avec l'un de ses noms de classe, pas celui de python.
Robino

85

Pour python 3.3

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

12
+1. Je pense que cela devrait être la bonne réponse car pour autant que je sache, cela import datetimepose toujours des problèmes, donc je suis en faveur d'une solution qui utilisefrom datetime import datetime
jeff

14

Tu devrais utiliser

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

Ou changer

from datetime import datetime

à

import datetime

11

Vous devez vraiment importer le module dans son propre alias .

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

Ce qui précède présente les avantages suivants par rapport aux autres solutions:

  • L'appel de la variable my_datetimeau lieu de dateréduit la confusion car il y a déjà un datedans le module datetime ( datetime.date).
  • Le module et la classe (tous deux appelés datetime) ne s'observent pas.

1

Si vous avez utilisé:

from datetime import datetime

Ensuite, écrivez simplement le code comme suit:

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

Mais si vous avez utilisé:

import datetime

alors vous seul pouvez écrire:

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

1

J'ai trouvé que c'était beaucoup plus facile

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

1

Je rencontre la même erreur, peut-être que vous avez déjà importé le module en utilisant uniquement import datetimepour changer form datetime import datetimeuniquement import datetime. Cela a fonctionné pour moi après l'avoir changé.


-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
Essayez d'éviter les réponses par code uniquement. Vous pouvez modifier votre message pour ajouter des explications et des liens pour soutenir votre code.
Tomerikoo
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.