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

时间:2016-03-08 12:47:01

标签: python python-3.3

我正在构建一个用户系统,每个用户都有一个个人资料页面。我每周都会运行一个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
   ... 

3 个答案:

答案 0 :(得分:2)

>>> 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

答案 1 :(得分:1)

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

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

datetime模块提供datetime.timedelta对象,允许您对datetime.datetime个对象执行算术运算。您可以向timedelta添加datetime以获取新的datetime,如果从另一个{1}}中减去一个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

答案 2 :(得分:0)

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

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之间的总天数。