我编写了一个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)
我在这里错过了什么吗?
答案 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