Модуль Python datetime и получение текущего времени

#python #datetime

#python #datetime

Вопрос:

Я новичок в Python, и я хочу сделать простой проект, чтобы сказать, сколько времени осталось до Рождества. Сначала у меня возникла проблема с текущим временем:

 import datetime
now = datetime.now()
print(now)`
  

и ошибка сказала module 'datetime' has no attribute 'now'

Чем я это исправил, выполнив from datetime import datetime , но чем вычисление даты создало ошибку в коде:

 from datetime import datetime
xmas = datetime.date(2020, 12, 25) - datetime.date.today()
now = datetime.now()
print(now)
  

И ошибка была: Exception has occurred: TypeError descriptor 'date' requires a 'datetime.datetime' object but received a 'int'
Пожалуйста, помогите мне.
Хорошего дня!

Ответ №1:

Импорт datetime класса немного сбивает с толку, потому что он находится в модуле, который также вызывается datetime . Когда вы это делаете from datetime import datetime , вы импортируете класс datetime в текущую область и можете просто сделать datetime.now() . Если вы просто делаете import datetime , вы импортируете модуль datetime и, следовательно, класс datetime.datetime , создавая now метод datetime.datetime.now() . Ясно, как грязь? 🙂

Что еще больше усугубляет путаницу, datetime модуль имеет date класс, а datetime класс имеет date метод. Вы смешиваете их в своем коде, вызывая date метод datetime класса, когда вы хотите создать date объект. Поскольку вы это сделали from datetime import datetime , вы вообще не импортировали datetime.date класс.

В любом случае, вот как это исправить:

 import datetime

xmas = datetime.date(2020, 12, 25) - datetime.date.today()
now = datetime.datetime.now()
print(now)
  

Обратите внимание, что в этом коде xmas является datetime.timedelta объектом и now является datetime.datetime объектом.

Вы также могли бы сделать:

 from datetime import date, datetime

xmas = date(2020, 12, 25) - date.today()
now = datetime.now()
print(now)
  

Надеюсь, параллельное рассмотрение двух примеров поможет прояснить проблему модуля и класса. Все дело в разных уровнях косвенности — в первом примере import оператор вводит весь модуль, и ваш код должен указать, какие классы извлекать из него. Во втором примере from ... import оператор извлекает эти два класса из модуля как часть импорта, и поэтому код может обращаться к ним напрямую по этим именам. Поскольку все имена настолько похожи, вы не можете полагаться на имя, чтобы узнать, к какой вещи вы обращаетесь, если вы действительно не понимаете, что именно сделал оператор import.

Комментарии:

1. могу ли я попросить еще об одной вещи? Как рассчитать время до Рождества, как я сделал для даты. Потому что у меня с этим проблемы

2. time_till_xmas = datetime(2020, 12, 25) - datetime.now()

Ответ №2:

Вы должны импортировать его следующим образом:

 from datetime import datetime