Как вычислить временной интервал между двумя строками времени

Я имею два раза, запуск и время остановки, в формате 10:33:26 (HH:MM:SS). Мне нужно различие между этими двумя разами. Я просматривал документацию для Python и искал онлайн, и я предположил бы, что это будет иметь некоторое отношение к дате и времени и/или модулям времени. Я не могу заставить это работать правильно и продолжать находить только, как сделать это, когда дата включена.

В конечном счете я должен вычислить средние числа продолжительностей нескольких времени. Я заставил разницу во времени работать, и я храню их в списке. Я теперь должен вычислить среднее число. Я использую регулярные выражения для парсинга исходных времен и затем делаю различия.

Для усреднения я должен преобразовать в секунды и затем среднее число?

149
задан PM 2Ring 10 June 2017 в 14:05
поделиться

5 ответов

Да, определенно datetime - это то, что вам здесь нужно. В частности, функция strptime , которая анализирует строку в объект времени.

from datetime import datetime
s1 = '10:33:26'
s2 = '11:15:49' # for example
FMT = '%H:%M:%S'
tdelta = datetime.strptime(s2, FMT) - datetime.strptime(s1, FMT)

Это дает вам объект timedelta , который содержит разницу между двумя временами. Вы можете делать с этим все, что хотите, например преобразовывая его в секунды или добавляя к другому datetime .

Будет возвращен отрицательный результат, если время окончания раньше времени начала, например s1 = 12:00:00 и s2 = 05:00:00 . Если вы хотите, чтобы код предполагал, что интервал пересекает полночь в этом случае (т.е. он должен предполагать, что время окончания никогда не раньше времени начала), вы можете добавить следующие строки в приведенный выше код:

if tdelta.days < 0:
    tdelta = timedelta(days=0,
                seconds=tdelta.seconds, microseconds=tdelta.microseconds)

(конечно, вам нужно включить from datetime import timedelta где-нибудь). Спасибо J.F. Sebastian за указание на этот вариант использования.

183
ответ дан 23 November 2019 в 22:23
поделиться

Этот сайт предлагает попробовать:

import datetime as dt
start="09:35:23"
end="10:23:00"
start_dt = dt.datetime.strptime(start, '%H:%M:%S')
end_dt = dt.datetime.strptime(end, '%H:%M:%S')
diff = (end_dt - start_dt) 
diff.seconds/60 

Этот форум использует time.mktime ()

9
ответ дан 23 November 2019 в 22:23
поделиться

Структура, представляющая разницу во времени в Python, называется timedelta . Если у вас есть типы start_time и end_time как datetime , вы можете рассчитать разницу, используя оператор - , например:

diff = end_time - start_time

, вы должны сделать это перед преобразованием в конкретный строковый формат (например, до start_time.strftime (...)). Если у вас уже есть строковое представление, вам нужно преобразовать его обратно во время / дату и время с помощью метода strptime .

10
ответ дан 23 November 2019 в 22:23
поделиться

И time , и datetime имеют компонент даты.

Обычно, если вы имеете дело только с временной частью, вы указываете дату по умолчанию. Если вас просто интересует разница и вы знаете, что оба времени относятся к одному и тому же дню, создайте datetime для каждого с днем, установленным на сегодняшний день, и вычтите время начала из времени остановки, чтобы получить интервал ( timedelta ).

1
ответ дан 23 November 2019 в 22:23
поделиться

Взгляните на модуль datetime и объекты timedelta. Вы должны создать объект datetime для времени начала и окончания, и когда вы вычтете их, вы получите timedelta.

1
ответ дан 23 November 2019 в 22:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: