我正在尝试为使用情况统计信息生成报告。以下是我在数组中存储的示例数据,这是从Mysql表中获取的。如何实现一个逻辑,即如果用户闲置超过30分钟,没有使用过系统,否则计算使用时间的平均时间。
timestamp=[]
for i in timestamp:
print i
2010-04-20 10:07:30
2010-04-20 10:07:38
2010-04-20 10:07:52
2010-04-20 10:08:22
2010-04-20 10:08:22
2010-04-20 10:09:46
2010-04-20 10:10:37
2010-04-20 10:10:58
2010-04-20 10:11:50
2010-04-20 10:12:13
2010-04-20 10:12:13
2010-04-20 10:25:38
2010-04-20 10:26:01
2010-04-20 10:26:01
2010-04-20 10:26:06
2010-04-20 10:26:29
2010-04-20 10:26:29
2010-04-20 10:26:35
2010-04-20 10:27:21
2010-04-20 01:32:46
2010-04-20 01:32:47
2010-04-20 01:32:57
2010-04-20 01:32:59
2010-04-20 01:33:03
2010-04-20 01:33:03
2010-04-20 01:33:05
2010-04-20 01:33:11
2010-04-20 01:33:15
2010-04-20 01:34:49
2010-04-20 01:34:55
2010-04-20 01:35:02
2010-04-20 01:35:17
2010-04-20 01:35:20
2010-04-20 01:36:49
2010-04-20 01:36:52
2010-04-20 01:36:52
2010-04-20 01:37:11
2010-04-20 01:37:15
2010-04-20 01:37:17
2010-04-20 01:50:11
2010-04-20 01:50:15
2010-04-20 01:50:18
2010-04-20 01:50:20
2010-04-20 01:50:33
2010-04-20 01:50:36
2010-04-20 01:51:56
我想这就是你想要的。它遍历列表,计算每个条目与上一个条目之间的差异。如果差异大于或等于30分钟,它将忽略它。如果少于30分钟,则会将其添加到该用户的总使用量中。(我假设所有时间戳都是针对同一用户的。)
from datetime import datetime,timedelta
# Convert the timestamps to datetime objects
usetimes = sorted(datetime.strptime(d, '%Y-%m-%d %H:%M:%S') for d in timestamp)
# Set the idle time to compare with later
idletime = timedelta(minutes = 30)
# Start the running total with a timedelta of 0
usage = timedelta()
last = usetimes[0]
for d in usetimes[1:]:
delta = d - last
if delta < idletime:
usage += delta
last = d
print "total usage:",usage
如果您想使用sum()并且zip()可以减少代码行,但是我不确定它是否可读:
from datetime import datetime,timedelta
usetimes = sorted(datetime.strptime(d, '%Y-%m-%d %H:%M:%S') for d in timestamp)
idletime = timedelta(minutes = 30)
usage = sum((x - y for x,y in zip(usetimes[1:],usetimes[:-1]) if x - y < idletime),timedelta())
print "total usage:", usage
在这种情况下,如果时间戳列表很长,您可以考虑使用izipfromitertools
代替zip
。
问题内容: 我有这个代码: 我的问题是我不明白为什么 Test 3 可以正常工作(它打印并且不产生),而 Test 4却 抛出了。正如你可以看到测试 1 和 2 ,和是平等的和。 Java 7和8中的行为相同。 问题答案: 您必须仔细查看正在调用的重载: 正在调用。即使提供了null参数,也不会抛出“ even”。 正在调用,因为的值类型为,需要进行拆箱转换。既然是,那就是该值的拆箱-而不是-引发
本文向大家介绍在生产者中,何时发生QueueFullException?相关面试题,主要包含被问及在生产者中,何时发生QueueFullException?时的应答技巧和注意事项,需要的朋友参考一下 答:每当Kafka生产者试图以代理的身份在当时无法处理的速度发送消息时,通常都会发生QueueFullException。但是,为了协作处理增加的负载,用户需要添加足够的代理,因为生产者不会阻止。
本文向大家介绍8085中产生时间延迟,包括了8085中产生时间延迟的使用技巧和注意事项,需要的朋友参考一下 在本节中,我们将看到如何使用8085程序生成时间延迟。该延迟将在不同的地方使用,以模拟时钟,计数器或其他区域。 当执行延迟子例程时,微处理器不执行其他任务。对于延迟,我们使用指令执行时间。在循环中执行一些指令,会产生延迟。有一些产生延迟的方法。这些方法如下。 使用NOP指令 使用8位寄存器作
问题内容: 我知道Java 是什么。我有一些产生的Java代码。 Java在什么情况下会产生NaN值? 问题答案: 根据我对梯度下降的了解,您很可能会跳到无穷大,因为您没有自适应能力(即您的体积太大)。
我使用一个自定义JsonConverter与System.Text.Json为了有DateTime与所需的时区 我在中这样注册它 就像您在代码中看到的那样,当收到没有时区的日期时,它将崩溃并出现异常,这将导致错误500 InternalServerError 我如何抛出异常以返回400而不触碰使用应用程序。UseExceptionHandler(因为代码在我的库中)? 请注意,引发的异常是Form
问题内容: 这是故意的吗?我强烈记得以前的版本返回了吗?我该怎么办,有没有新的分公司运营商,或者我必须始终选拔? 问题答案: 更改除法运算符