2016-11-06 6 views
2

Попытка найти прошедшее время из двух строк, которые содержат временную метку и находятся в формате hh:mm:ss.mss. В принципе, я хочу вычесть два объекта datetime и получить числовой результат в миллисекундах.Вычитание объектов datetime для получения числового результата в миллисекундах (Python)

Вот мой код:

from datetime import datetime 

elapsed_time = 0 
s = '13:46:34.550' 
e = '13:46:36.750' 

# only interested on the time part, not the date 
start_time = datetime.strptime(s, '%H:%M:%S.%f') 
end_time = datetime.strptime(e, '%H:%M:%S.%f') 

#elapsed_time = end_time - start_time 
#elapsed_time = (end_time - start_time).microsecond 

Для обоих elapsed_time расчетов Я получаю TypeError: unsupported operand type(s) for -: 'datetime.datetime' and 'int'.

Необходимо напечатать 00:00:02.250 или (в идеале) 2200.

Любые идеи, что я делаю неправильно?

+0

Просто небольшая каламбур, разница между thetwo раз будет ' 00: 00: 02.200' или идеально, '2200' –

+0

@DamienPaul Хороший улов, исправил его. благодаря – Yannis

ответ

2

Следующая работал для меня (с помощью Python 3.5.2):

from datetime import datetime 

elapsed_time = 0 
s = '13:46:34.550' 
e = '13:46:36.750' 

# only interested on the time part, not the date 
start_time = datetime.strptime(s, '%H:%M:%S.%f') 
end_time = datetime.strptime(e, '%H:%M:%S.%f') 

diff = end_time - start_time 
elapsed_time = int((diff.seconds * 1000) + (diff.microseconds/1000)) 

Выход я получил 2200 что разница во времени в миллисекундах между s и e

Некоторые ссылки:

Python: Difference between two datetimes in milliseconds (блог Марка Нидхэ)

Python docs about datetime

Немного объяснений от документации (связанные непосредственно выше):

В разделе 8.1.4 datetime Objects говорится, что для операции:

timedelta = datetime1 - datetime2 

(что соответствует 2-й последней строке кода в этом ответе):

Вычитание из datetime из datetime определяется только тогда, когда оба операнда наивны, или если оба знают. Если кто-то знает, а другой наивен, то возникает TypeError.

также:

Изменен в версии 3.3: сравнение равенства между наивными и осведомленными datetime случаев не вызывают TypeError