如何在Python 3中计算时间?

时间:2019-06-21 23:23:46

标签: python python-3.x discord discord.py

我想要一个代码来显示某人进入语音通道的完成时间,但是我不知道如何启动和停止计数器

    @bot.event
    async def on_voice_state_update(before, after):

        if after.voice.voice_channel:
            timestrr = time.strftime("%d.%m.%Y-%H:%M:%S")
            voicezeit(after.id, timestrr)
    #here should a timer start
        else:
             #and here should the timer stop

我真的不知道该怎么做,因此我非常感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

如果只想测量两点之间经过的挂钟时间,则可以使用time.time():

import time

start = time.time()
print("hello")
end = time.time()
print(end - start)

这以秒为单位给出执行时间。

  

自3.3起,另一个选择可能是使用perf_counterprocess_time,   根据您的要求。在3.3之前,建议使用   time.clock。但是,目前不推荐使用:

在Unix上,以秒为单位返回当前处理器时间,以浮点数表示。精度,实际上是“处理器时间”含义的确切定义,取决于同名C函数的精度。

在Windows上,此函数将基于Win32函数QueryPerformanceCounter()返回自第一次调用此函数以来经过的时间(以秒为单位)的浮点数。分辨率通常优于一微秒。

从版本3.3开始不推荐使用:此功能的行为取决于平台:请根据您的要求使用perf_counter()或process_time()来具有明确定义的行为。

答案 1 :(得分:2)

您为什么需要柜台?刚开始时将start_time变量初始化为None,然后在if块中检查是否已设置,如果未设置,则将其设置为time.time()。在else块中,再次将end_time设置为time.time()并计算差值。

编辑

我不知道您应用程序其余部分的布局,您必须在此更新功能之外的某个地方初始化start_time = None。您需要为每个用户设置它,我假设它存储为user.start_time,但是同样,这取决于您应用程序的结构。然后您的功能可能会变成这样:

    @bot.event
    async def on_voice_state_update(before, after):

        if after.voice.voice_channel:
            if not user.start_time:  # this was set to None somewhere else
                user.start_time = time.time()
            # import datetime from datetime at the top of your file
            timestrr = datetime.from_timestamp(user.start_time).strftime("%d.%m.%Y-%H:%M:%S")
            voicezeit(after.id, timestrr)
        else:
             end_time = time.time()
             voice_chat_time = end_time - after.user.start_time