从日期和日期时间中减去Python时区增量会得出不同的日期

时间:2018-07-03 07:28:47

标签: python django datetime

我编写了一个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()返回的日期比timezone.datetime.today().date()早1天

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 :(得分:1)

这里的问题是您要减去非整数天数(6 * 365/12 = 182.5)。但是date的最小单位是一天,并且如the documentation中所述,在timedelta上进行操作时,小于dates的单位比当天小。

所以date操作等于减去182天,而datetime操作等于减去182.5天。

一个比喻是:

184.0 - 182.5 = 1.5
int(184.0) - int(182.5) = 2