У меня есть два раза, время начала и окончания, в формате 10:33:26 (ЧЧ: ММ: СС). Мне нужна разница между двумя разами. Я просматривал документацию по Python и искал в Интернете, и я подумал бы, что это как-то связано с модулями datetime и / или time. Я не могу заставить это работать должным образом и продолжаю находить только, как сделать это, когда свидание вовлечено.
В конечном итоге мне нужно рассчитать средние значения для нескольких временных интервалов. У меня есть разница во времени, и я храню их в списке. Теперь мне нужно рассчитать среднее. Я использую регулярные выражения, чтобы разобрать оригинальное время и затем делаю различия.
Для усреднения, я должен преобразовать в секунды, а затем усреднить?
python
time
python-2.6
Анна
источник
источник
Ответы:
Да, безусловно,
datetime
это то, что вам нужно здесь. В частности,strptime
функция, которая анализирует строку в объекте времени.Это дает вам
timedelta
объект, который содержит разницу между двумя временами. Вы можете делать с этим все, что хотите, например, конвертировать его в секунды или добавлять в другоеdatetime
.Это вернет отрицательный результат, если время окончания раньше времени начала, например
s1 = 12:00:00
иs2 = 05:00:00
. Если вы хотите, чтобы код предполагал, что в этом случае интервал пересекает полночь (т.е. он должен предполагать, что время окончания никогда не бывает раньше времени начала), вы можете добавить следующие строки в приведенный выше код:(конечно нужно
from datetime import timedelta
куда то включить ). Спасибо JF Sebastian за указание на этот вариант использования.источник
days= -2
и выше в объекте tdelta.days
никогда не может быть -2 или меньше, если нет дополнительной информации (в частности, даты) помимо того, что описано в вопросе. Так что эта ситуация здесь не актуальна.tdelta.total_seconds()
.Попробуйте это - это эффективно для сроков краткосрочных событий. Если что-то занимает больше часа, то для окончательного отображения, возможно, потребуется некоторое удобное форматирование.
Разница во времени возвращается в виде количества прошедших секунд.
источник
time.monotonic()
в Python).time.time()
может идти в обратном направлении (например, когда время на машине изменяется, включая корректировки NTP).Вот решение, которое поддерживает поиск разницы, даже если время окончания меньше, чем время начала (более полуночного интервала), например
23:55:00-00:25:00
(продолжительность получаса):Вывод
time_diff()
возвращает объект timedelta, который вы можете передать (как часть последовательности)mean()
функции напрямую, например:mean()
Результат такжеtimedelta()
объект , который можно преобразовать в секундах (td.total_seconds()
метод (с Python 2.7)), часы (td / timedelta(hours=1)
(Python 3)) и т.д.источник
Структура, которая представляет разницу во времени в Python, называется timedelta . Если у вас есть
start_time
иend_time
какdatetime
типы, вы можете рассчитать разницу, используя-
оператор, как:Вы должны сделать это перед преобразованием в конкретный формат строки (например, перед start_time.strftime (...)). Если у вас уже есть строковое представление, вам нужно преобразовать его обратно во время / дату / время, используя метод strptime .
источник
Этот сайт говорит, чтобы попробовать:
Этот форум использует time.mktime ()
источник
Мне нравится, как этот парень делает это - https://amalgjose.com/2015/02/19/python-code-for-calculating-the-difference-between-two-time-stamps . Не уверен, что у него есть минусы.
Но выглядит аккуратно для меня :)
Что касается вопроса, который вы все еще должны использовать,
datetime.strptime()
как говорили другие ранее.источник
Попробуй это
ВЫВОД :
источник
результат: 0 0 0 0 -47 -37
источник
Оба
time
иdatetime
имеют компонент даты.Обычно, если вы имеете дело только с частью времени, вы должны указать дату по умолчанию. Если вы просто интересуетесь разницей и знаете, что оба времени находятся в одном и том же дне, то создайте a
datetime
для каждого с днем, установленным на сегодня, и вычтите начало из времени остановки, чтобы получить интервал (timedelta
).источник
Взгляните на модуль datetime и объекты timedelta. Вы должны в конечном итоге построить объект datetime для времени начала и окончания, а когда вы вычтете их, вы получите timedelta.
источник
Кратко, если вы просто заинтересованы в прошедшем времени, которое составляет менее 24 часов. Вы можете отформатировать вывод по необходимости в операторе возврата:
источник