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


127

Я отримав таку помилку:

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

У наступному рядку:

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

Хтось знає причину помилки?

Я імпортував дату, from datetime import datetimeякщо це допомагає

Дякую

Відповіді:


225

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 - це вина датнього часу, відтіняючи ім'я власного модуля одним із назв його класу, а не python.
Робіно

85

Для пітона 3.3

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

12
+1. Я думаю, що це має бути правильною відповіддю, оскільки, наскільки я знаю, import datetimeзавжди виникає проблеми, тому я виступаю за рішення, яке використовуєfrom datetime import datetime
jeff

14

Ви повинні використовувати

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

Або змінити

from datetime import datetime

до

import datetime

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.