Определение, прошёл ли более суток с указанной даты

Сравните прошедший интервал с 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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее