我正在构建一个用户系统,每个用户都有一个个人资料页面。我每周都会运行一个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
...
答案 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)
将打印date1
和date2
之间的总天数。