Сравните прошедший интервал с timedelta(days=1). Текст условия требует «как минимум один день», поэтому используется >=; формулировка docstring «больше» означала бы строгое >.
Определение, прошёл ли более суток с указанной даты
Сравните прошедший интервал с timedelta(days=1). Текст условия требует «как минимум один день», поэтому используется >=; формулировка docstring «больше» означала бы строгое >.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо написать функцию, которая возвращает True, если с переданной даты прошло как минимум один полный день.
from datetime import datetime
def is_old(date):
""" Вернуть True, если с момента date прошло больше одного дня """
raise NotImplementedError
date1 = datetime(2024, 1, 18)
date2 = datetime(2024, 1, 20)
print(is_old(date1))
Ответ
Сравните прошедший интервал с timedelta(days=1). Текст условия требует «как минимум один день», поэтому используется >=; формулировка docstring «больше» означала бы строгое >.
Чтобы не смешивать aware и naive даты:
from datetime import datetime, timedelta, timezone
def is_old(date):
if date.tzinfo is None or date.utcoffset() is None:
now = datetime.now()
elapsed = now - date
else:
now = datetime.now(timezone.utc)
elapsed = now - date.astimezone(timezone.utc)
return elapsed >= timedelta(days=1)
Naive date здесь трактуется как локальное время. Для точных прошедших 24 часов, особенно при переходе часового пояса на летнее время, предпочтительны aware даты и расчёт в UTC. Будущая дата возвращает False.