Typ Objekt 'datetime.datetime' hat kein Attribut 'datetime'

126

Ich habe folgenden Fehler erhalten:

Typ Objekt 'datetime.datetime' hat kein Attribut 'datetime'

In der folgenden Zeile:

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

Kennt jemand den Grund für den Fehler?

Ich habe datetime mit importiert, from datetime import datetimewenn das hilft

Vielen Dank

Chris Frank
quelle

Antworten:

225

Datetime ist ein Modul, mit dem Datums-, Uhrzeit- und Datumsangaben (alle Datentypen) verarbeitet werden können. Dies bedeutet, dass dies datetimesowohl ein Modul der obersten Ebene als auch ein Typ innerhalb dieses Moduls ist. Das ist verwirrend.

Ihr Fehler basiert wahrscheinlich auf der verwirrenden Benennung des Moduls und darauf, was Sie oder ein von Ihnen verwendetes Modul bereits importiert haben.

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

Wenn Sie jedoch datetime.datetime importieren:

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

Ich vermute, Sie oder eines der von Ihnen verwendeten Module wurde folgendermaßen importiert : from datetime import datetime.

John Lyon
quelle
3
@jozzas tolle Antwort. Ich hatte ein Problem mit timedelta, das mit Ihrer Lösung gelöst wurde. Txs.
Luis Miguel
1
@Jean Dies ist der Fehler, dass datetime den Namen seines eigenen Moduls mit einem seiner Klassennamen und nicht mit dem von Python beschattet.
Robino
85

Für Python 3.3

from datetime import datetime, timedelta
futuredate = datetime.now() + timedelta(days=10)
RouR
quelle
12
+1. Ich denke, dies sollte die richtige Antwort sein, da sie import datetimefrom datetime import datetime
meines
14

Du solltest benutzen

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

Oder ändern

from datetime import datetime

zu

import datetime
Wartenkuo
quelle
11

Sie sollten das Modul wirklich in einen eigenen Alias importieren .

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

Das Obige hat gegenüber den anderen Lösungen die folgenden Vorteile:

  • Aufruf der Variablen my_datetime anstelle von dateVerwirrung verringert die Verwirrung, da datedas datetime-Modul ( datetime.date) bereits eine enthält .
  • Das Modul und die Klasse (beide aufgerufen datetime) beschatten sich nicht gegenseitig.
Robino
quelle
1

Wenn Sie verwendet haben:

from datetime import datetime

Dann schreiben Sie einfach den Code wie folgt:

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

Aber wenn Sie verwendet haben:

import datetime

dann kannst nur du schreiben:

date = datetime.datetime(int(2005), int(5), 1)
M. Paul
quelle
1

Ich fand das viel einfacher

from dateutil import relativedelta
relativedelta.relativedelta(end_time,start_time).seconds
Kamaldeep Singh
quelle
1

Ich stoße auf den gleichen Fehler, vielleicht haben Sie das Modul bereits importiert, indem Sie nur verwenden, import datetimealso wechseln Sie form datetime import datetimezu nur import datetime. Es hat bei mir funktioniert, nachdem ich es wieder geändert habe.

Audrey Mengue
quelle
-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
quelle
6
Vermeiden Sie nur Code-Antworten. Sie können Ihren Beitrag bearbeiten , um einige Erklärungen und Links zur Unterstützung Ihres Codes hinzuzufügen.
Tomerikoo