获取日期之间的差异并在 python 中创建排名

getting difference between dates and create a rank in python

我正在构建一个用户系统,其中每个用户都有一个个人资料页面。我 运行 每周都有一个 cron 作业,根据最近更新个人资料的用户给用户打分。为此,我可以给 1-100 分。

例如:如果用户 A 今天更新了他们的个人资料,则用户 A 将获得 100 points,如果昨天更新个人资料,则将是 99 points 而前一天将是 98 points 等等

如果任何用户最近 100 天或更长时间前更新了他们的个人资料,则得分将为 0

现在,我遇到的问题是将 updated_on 的日期更改为数字。

我有这段代码,我正在从数据库中获取它,但我卡住了。

updated_on = datetime.datetime.strptime(str(updated_on_date), '%Y-%m-%d %H:%M:%S').date()

if updated_on   .... ?:
    rank  = 100
elif
   ... 

使用此示例,您可以计算两个日期之间的天数:

date1 = datetime.datetime.strptime(str('2016-01-01 23:00:00'), '%Y-%m-%d %H:%M:%S')
date2 = datetime.datetime.strptime(str('2016-03-08 23:00:00'), '%Y-%m-%d %H:%M:%S')
number_of_days = date2 -date1
print(number_of_days.days)

将打印 date1date2 之间的总天数。

>>> from datetime import date
>>> today = date.today()
>>> sample = [date(2015,5,27), date(2016,3,4), date(2015,12,31), today]
>>> for updated_on in sample:
...     delta = today - updated_on
...     rank = max(0, 100 - delta.days)
...     print("updated on: {} -> rank: {}".format(updated_on, rank))
...
updated on: 2015-05-27 -> rank: 0
updated on: 2016-03-04 -> rank: 96
updated on: 2015-12-31 -> rank: 32
updated on: 2016-03-08 -> rank: 100

没有必要执行 str(updated_on_date) 因为 updated_on_date 已经是一个字符串。我假设这些日期是 UTC 时间,因为使用当地时间会导致疯狂。 :)

您可以使用 current_date = datetime.utcnow() 获取 UTC 的当前日期时间。在下面的代码中,我将硬编码今天的日期,以便未来的读者获得与我相同的输出。

datetime 模块提供了一个 datetime.timedelta 对象,它允许您使用 datetime.datetime 对象执行算术运算。您可以将 timedelta 添加到 datetime 以获得新的 datetime,如果您从另一个中减去一个 datetime,则结果是 timedelta。所以很容易得到两个日期之间的天数。

from datetime import datetime

dates = (
    '2016-03-08 00:00:00',
    '2016-03-07 00:00:00',
    '2016-03-01 00:00:00',
    '2015-11-30 00:00:00',
    '2015-11-29 00:00:00',
    '2015-11-20 00:00:00',
)

#current_date = datetime.utcnow()
current_date = datetime(2016, 3, 8)
print('current', current_date)

for datestr in dates:
    updated_on = datetime.strptime(datestr, '%Y-%m-%d %H:%M:%S')
    delta = (current_date - updated_on).days
    rank = max(0, 100 - delta)
    print('updated', updated_on, 'delta', delta, 'rank', rank) 

输出

current 2016-03-08 00:00:00
updated 2016-03-08 00:00:00 delta 0 rank 100
updated 2016-03-07 00:00:00 delta 1 rank 99
updated 2016-03-01 00:00:00 delta 7 rank 93
updated 2015-11-30 00:00:00 delta 99 rank 1
updated 2015-11-29 00:00:00 delta 100 rank 0
updated 2015-11-20 00:00:00 delta 109 rank 0