Как я могу рассчитывать время в Python 3? - PullRequest
0 голосов
/ 22 июня 2019

Мне нужен код, который показывает время завершения, когда кто-то был в голосовом канале, но я не знаю, как запустить и остановить счетчик

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

3 голосов
/ 22 июня 2019

Если вы просто хотите измерить истекшее время настенных часов между двумя точками, вы можете использовать time.time ():

import time

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

Это дает время выполнения в секундах.

Другой вариант, поскольку 3.3 может использовать perf_counter или process_time, в зависимости от ваших требований. До 3.3 было рекомендовано использовать time.clock. Тем не менее, в настоящее время это устарело:

В Unix возвращает текущее время процессора в виде числа с плавающей запятой, выраженного в секундах. Точность и, собственно, само определение значения «процессорного времени» зависит от точности функции C с тем же именем.

В Windows эта функция возвращает настенные часы, прошедшие с момента первого вызова этой функции, в виде числа с плавающей запятой на основе функции Win32 QueryPerformanceCounter(). Разрешение обычно лучше, чем одна микросекунда.

Устаревший с версии 3.3: поведение этой функции зависит от платформы: вместо этого используйте perf_counter () или process_time (), в зависимости от ваших требований, чтобы иметь четко определенное поведение.

2 голосов
/ 22 июня 2019

Зачем вам счетчик?Просто инициализируйте 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
...