Eu tenho duas vezes, uma hora de início e uma parada, no formato 10:33:26 (HH: MM: SS). Eu preciso da diferença entre os dois tempos. Estive pesquisando a documentação do Python e pesquisando on-line e imaginaria que isso teria algo a ver com os módulos datetime e / ou time. Não consigo fazê-lo funcionar corretamente e continuo descobrindo apenas como fazer isso quando há uma data envolvida.
Por fim, preciso calcular as médias de várias durações de tempo. Eu tenho as diferenças de horário para trabalhar e as estou armazenando em uma lista. Agora preciso calcular a média. Estou usando expressões regulares para analisar os horários originais e depois fazer as diferenças.
Para a média, devo converter para segundos e depois para a média?
python
time
python-2.6
Hannah
fonte
fonte
Respostas:
Sim, definitivamente
datetime
é o que você precisa aqui. Especificamente, astrptime
função, que analisa uma string em um objeto de tempo.Isso gera um
timedelta
objeto que contém a diferença entre os dois tempos. Você pode fazer o que quiser com isso, por exemplo, convertendo-o em segundos ou adicionando-o a outrodatetime
.Isso retornará um resultado negativo se o horário final for anterior ao horário de início, por exemplo,
s1 = 12:00:00
es2 = 05:00:00
. Se você quiser que o código assuma que o intervalo cruza a meia-noite nesse caso (ou seja, ele deve assumir que o horário final nunca é anterior ao horário de início), você pode adicionar as seguintes linhas ao código acima:(é claro que você precisa incluir em
from datetime import timedelta
algum lugar). Agradecemos a JF Sebastian por apontar esse caso de uso.fonte
days= -2
e acima no objeto tdelta.days
nunca pode ser -2 ou menos sem que haja informações adicionais (especificamente datas) além do descrito na pergunta. Portanto, essa situação não é relevante aqui.tdelta.total_seconds()
.Tente isso - é eficiente para sincronizar eventos de curto prazo. Se algo demorar mais de uma hora, a exibição final provavelmente precisará de uma formatação amigável.
A diferença de tempo é retornada como o número de segundos decorridos.
fonte
time.monotonic()
em Python).time.time()
pode retroceder (por exemplo, quando o tempo na máquina mudar, incluindo correções NTP).Aqui está uma solução que suporta encontrar a diferença, mesmo que o horário final seja menor que o horário de início (no intervalo da meia-noite), como
23:55:00-00:25:00
(meia hora de duração):Resultado
time_diff()
retorna um objeto timedelta que você pode passar (como parte da sequência) para umamean()
função diretamente, por exemplo:O
mean()
resultado também é umtimedelta()
objeto que você pode converter em segundos (td.total_seconds()
método (desde Python 2.7)), horas (td / timedelta(hours=1)
(Python 3)) etc.fonte
A estrutura que representa a diferença horária no Python é chamada timedelta . Se você tem
start_time
eend_time
comodatetime
tipos, pode calcular a diferença usando um-
operador como:você deve fazer isso antes de converter para o formato de string particualr (por exemplo, antes de start_time.strftime (...)). Caso você já tenha uma representação de sequência, é necessário convertê-la novamente em time / datetime usando o método strptime .
fonte
Este site diz para tentar:
Este fórum usa time.mktime ()
fonte
Eu gosto de como esse cara faz isso - https://amalgjose.com/2015/02/19/python-code-for-calculating-the-difference-between-two-time-stamps . Não tenho certeza se tem alguns contras.
Mas parece arrumado para mim :)
Em relação à pergunta, você ainda precisa usar
datetime.strptime()
como os outros disseram anteriormente.fonte
Tente isto
RESULTADO :
fonte
resultado: 0 0 0 0 -47 -37
fonte
Ambos
time
edatetime
têm um componente de data.Normalmente, se você estiver apenas lidando com a parte do tempo, fornecerá uma data padrão. Se você está interessado apenas na diferença e sabe que os dois horários são no mesmo dia, construa um
datetime
para cada um com o dia definido para hoje e subtraia o início do horário de parada para obter o intervalo (timedelta
).fonte
Dê uma olhada no módulo datetime e nos objetos timedelta. Você deve acabar construindo um objeto de data e hora para os horários de início e de término e, quando subtraí-los, obtém um intervalo de tempo.
fonte
Conciso, se você está interessado apenas no tempo decorrido inferior a 24 horas. Você pode formatar a saída conforme necessário na instrução de retorno:
fonte