объект типа datetime.datetime не имеет атрибута datetime

127

Я получил следующую ошибку:

объект типа datetime.datetime не имеет атрибута datetime

В следующей строке:

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

Кто-нибудь знает причину ошибки?

Я импортировал datetime, from datetime import datetimeесли это поможет

Спасибо

Крис Франк
источник

Ответы:

226

Datetime - это модуль, который позволяет обрабатывать дату, время и datetime (все они являются типами данных). Это означает, что datetimeэто как модуль верхнего уровня, так и тип внутри этого модуля. Это смущает.

Вероятно, ваша ошибка связана с непонятным названием модуля и тем, что вы или модуль, который вы используете, уже импортировали.

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

Но если вы импортируете 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)

Я подозреваю , что вы или один из модулей , которые вы используете импортировала так: from datetime import datetime.

Джон Лайон
источник
3
@jozzas отличный ответ. У меня была проблема с timedelta, которая была решена вашим решением. Txs.
Луис Мигель
1
@Jean, это ошибка того, что datetime затеняет имя своего собственного модуля одним из имен своих классов, а не python.
Робино
85

Для Python 3.3

from datetime import datetime, timedelta
futuredate = datetime.now() + timedelta(days=10)
RouR
источник
12
+1. Я думаю, что это должен быть правильный ответ, потому что, насколько я знаю, import datetimeвсегда возникают проблемы, поэтому я поддерживаю решение, которое используетfrom datetime import datetime
Джефф
14

Вы должны использовать

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

Или изменить

from datetime import datetime

в

import datetime
waitingkuo
источник
11

Вам действительно следует импортировать модуль под собственный псевдоним .

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

Вышеуказанное имеет следующие преимущества перед другими решениями:

  • Вызов переменной my_datetimeвместо dateуменьшает путаницу, поскольку dateв модуле datetime ( datetime.date) уже есть.
  • Модуль и класс (оба вызываются datetime) не затеняют друг друга.
Робиньо
источник
1

Если вы использовали:

from datetime import datetime

Затем просто напишите код как:

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

Но если вы использовали:

import datetime

тогда только вы можете написать:

date = datetime.datetime(int(2005), int(5), 1)
М. Пол
источник
1

Я обнаружил, что это намного проще

from dateutil import relativedelta
relativedelta.relativedelta(end_time,start_time).seconds
Камалдип Сингх
источник
1

Я сталкиваюсь с той же ошибкой, возможно, вы уже импортировали модуль, используя только import datetimeтак, чтобы изменить form datetime import datetimeтолько на import datetime. У меня сработало после того, как я вернул его обратно.

Одри Менгу
источник
-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
Старайтесь избегать ответов, состоящих только из кода. Вы можете отредактировать свое сообщение, чтобы добавить некоторые пояснения и ссылки для поддержки вашего кода.
Tomerikoo