获取日期之间的差异并在 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)
将打印 date1
和 date2
之间的总天数。
>>> 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
我正在构建一个用户系统,其中每个用户都有一个个人资料页面。我 运行 每周都有一个 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)
将打印 date1
和 date2
之间的总天数。
>>> 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