Дельта часового пояса Python дает разные даты при вычитании из даты и времени - PullRequest
0 голосов
/ 03 июля 2018

Я написал функцию python, которая дает мне дату и время в прошлом со ссылкой на текущую дату.

def get_past_date(no_of_days, date_only=False):
    """Returns timezone aware Datetime object in past based on no_of_days provided"""
    if date_only:
        return timezone.datetime.today().date() - timezone.timedelta(no_of_days)
    past = timezone.datetime.today() - timezone.timedelta(no_of_days)
    return timezone.make_aware(past, timezone=pytz.timezone(settings.TIME_ZONE))

Проблема:

timezone.datetime.today().date() - timezone.timedelta(no_of_days)

и

timezone.datetime.today() - timezone.timedelta(no_of_days)

вернуть другую дату для того же ввода (no_of_days)

timezone.datetime.today() возвращает дату, которая на 1 день раньше, чем timezone.datetime.today().date()

timezone.datetime.today() - timezone.timedelta(6 * 365 / 12)
= datetime.datetime(2018, 1, 1, 21, 12, 43, 741750)

timezone.datetime.today().date() - timezone.timedelta(6 * 365 / 12)
= datetime.date(2018, 1, 2)

Я что-то здесь упускаю?

1 Ответ

0 голосов
/ 03 июля 2018

Проблема здесь в том, что вы вычитаете нецелое число дней (6 * 365/12 = 182,5). Но наименьшая единица измерения date - это один день, и, как описано в документация , timedelta единицы меньше, чем день, игнорируется при работе на dates.

Таким образом, операция date эквивалентна вычитанию 182 дней, а операция datetime - 182,5 дня.

Аналогия будет:

184.0 - 182.5 = 1.5
int(184.0) - int(182.5) = 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...