Подтвердить что ты не робот

Python "import datetime" v.s. "from datetime import datetime"

У меня есть script, который должен выполнить следующее в разных строках в script:

today_date = datetime.date.today()
date_time = datetime.strp(date_time_string, '%Y-%m-%d %H:%M')

В моих операторах импорта у меня есть следующее:

from datetime import datetime
import datetime

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

AttributeError: 'module' object has no attribute 'strp'

Если я изменил порядок операторов импорта на:

import datetime
from datetime import datetime

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

AttributeError: 'method_descriptor' object has no attribute 'today'

Если я снова изменил оператор импорта:

import datetime

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

AttributeError: 'module' object has no attribute 'strp'

Что здесь происходит и как заставить меня работать? Ценить это. Спасибо.

4b9b3361

Ответ 1

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

Когда вы выполните:

from datetime import datetime
import datetime

Сначала вы устанавливаете datetime как ссылку на класс, а затем сразу же устанавливаете его как ссылку на модуль. Когда вы делаете это наоборот, это одно и то же, но в конечном итоге оно становится ссылкой на класс.

Вам нужно переименовать одну из этих ссылок. Например:

import datetime as dt
from datetime import datetime

Затем вы можете изменить ссылки в форме datetime.xxxx, которые ссылаются на модуль на dt.xxxx.

Или просто просто import datetime и измените все ссылки на использование имени модуля. Другими словами, если что-то просто говорит datetime(...), вам нужно изменить эту ссылку на datetime.datetime.

У Python, к сожалению, есть такая штука в своей библиотеке. Если они следуют своим собственным правилам именования в PEP 8, класс datetime будет называться datetime, и не было бы проблем с использованием обоих datetime означает, что модуль и datetime означают класс.

Ответ 2

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

Используйте только import datetime, затем убедитесь, что вы всегда используете datetime.datetime для обращения к содержащемуся типу:

import datetime

today_date = datetime.date.today()
date_time = datetime.datetime.strptime(date_time_string, '%Y-%m-%d %H:%M')

Теперь datetime - это модуль, и вы можете ссылаться на содержащиеся в нем типы.

Кроме того, импортируйте все необходимые вам модули из модуля:

from datetime import date, datetime

today_date = date.today()
date_time = datetime.strptime(date_time_string, '%Y-%m-%d %H:%M')

Здесь datetime - тип модуля. date - это другой тип, из того же модуля.

Ответ 3

datetime - это модуль, который содержит тип, который также называется datetime. Кажется, вы хотите использовать оба, но вы пытаетесь использовать одно и то же имя для ссылки на оба. Тип и модуль - две разные вещи, и вы не можете ссылаться на оба из них с именем datetime в своей программе.

Если вам нужно использовать что-либо из модуля помимо типа datetime (как вы, по-видимому, делаете), вам нужно импортировать модуль с помощью import datetime. Затем вы можете ссылаться на тип "даты" как datetime.date и тип datetime как datetime.datetime.

Вы также можете сделать это:

from datetime import datetime, date
today_date = date.today()
date_time = datetime.strp(date_time_string, '%Y-%m-%d %H:%M')

Здесь вы импортируете только нужные вам имена (типы даты и времени) и импортируете их напрямую, чтобы вам вообще не нужно ссылаться на сам модуль.

В конечном счете вам нужно решить, какие имена нужно использовать в модуле, и как лучше всего их использовать. Если вы используете только одну или две вещи из модуля (например, только типы date и datetime), возможно, им будет легко импортировать эти имена. Если вы используете много вещей, вероятно, лучше импортировать модуль и получить доступ к вещам внутри него с помощью точечного синтаксиса, чтобы избежать загромождения вашего глобального пространства имен именами, специфичными для даты.

Обратите также внимание, что если вы импортируете имя самого модуля, вы можете сократить имя, чтобы упростить ввод текста:

import datetime as dt
today_date = dt.date.today()
date_time = dt.datetime.strp(date_time_string, '%Y-%m-%d %H:%M')

Ответ 4

Разница между дат-временем и datetime import datetime заключается в том, что вы имеете дело с модулем за один раз и классом в другом.

Функция strptime существует только в классе datetime, поэтому вам нужно импортировать класс с модулем, иначе вам придется дважды указывать дату и время при вызове этой функции.

Дело в том, что имя класса и имя модуля получили одно и то же имя, поэтому он создает немного недоумения.

Ответ 5

попробуйте следующее:

import datetime
from datetime import datetime as dt

today_date = datetime.date.today()
date_time = dt.strptime(date_time_string, '%Y-%m-%d %H:%M')

strp() не существует. Я думаю, вы имеете в виду strptime.

Ответ 6

from datetime import datetime,timedelta
today=datetime.today()
print("Todays Date:",today)
yesterday=today-datetime,timedelta(days=1)
print("Yesterday date:",yesterday)
tommorrow=today+datetime.timedelta(days=1)
print("Tommorrow Date:",tommorrow)