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

Chris Frank
la source

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.

John Lyon
la source
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)
RouR
la source
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
en attente
la source
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.
Robino
la source
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)
M. Paul
la source
1

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

from dateutil import relativedelta
relativedelta.relativedelta(end_time,start_time).seconds
Kamaldeep Singh
la source
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é.

Audrey Mengue
la source
-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
la source
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