Я новичок в Python (2.7), и у меня есть две переменные, которые содержат временные метки — мне нужно найти разницу между ними в секундах/микросекундах.
Я потратил почти целый день, пытаясь понять, как это сделать, и зашел в тупик - так что не могли бы вы помочь указать мне правильное направление, пожалуйста, имейте в виду, что я новичок в python, поэтому мне нужно объяснить вещи просто.
Я искал Stackoverflow и не видел никаких вопросов/ответов, которые помогли бы мне решить эту проблему, а если и помогают, то я не понимаю, как... поскольку они либо используют разные версии python, либо работают с известными значениями временной метки, где переменные в мои генерируются во время работы программы...
Во-первых, я импортирую следующие модули для работы со значениями даты и времени:
from datetime import *
from time import *
Затем я получаю одно значение метки времени из сообщения amqp в формате posix (utc), поэтому я конвертирую его, используя:
== t_timestamp is acquired from an amqp message==
ts = int(t_timestamp) / 1000.0
formatted_timestamp = datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S.%f')
Затем я присваиваю локальное системное время переменной и преобразовываю ее так, чтобы она имела тот же формат, что и выше, используя:
local_time = datetime.utcnow()
local_time = datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S.%f')
Если я напечатаю переменные formatted_timestamp и local_time, они выглядят точно так же с точки зрения форматирования...
2016-11-03 21:05:37.512000 and 2016-11-03 21:05:38.045000
если затем я попытаюсь вычесть две переменные друг из друга, чтобы увидеть разницу во времени между formatted_timestamp и local_time в секундах/микросекундах, как показано ниже:
tstamp_age = (local_time - formatted_timestamp)
Я получаю следующую ошибку:
TypeError: unsupported operand type(s) for -: 'str' and 'str'
Если я не конвертирую отметку времени local_time, я получаю следующую ошибку
TypeError: unsupported operand type(s) for -: 'datetime.datetime' and 'str'
Но как ни странно, если я напечатаю две переменные, я получу отформатированные временные метки, как показано ниже:
2016-11-03 21:12:08.319000 and 2016-11-03 21:12:12.299000
Итак, я полагаю, мой вопрос: как я могу вычесть две даты в формате str или преобразовать метку времени, которая отформатирована, как показано ниже, в тип datetime, чтобы я мог использовать это в операция вычитания, чтобы показать остаток в секундах\микросекундах?
== t_timestamp is acquired from an amqp message==
ts = int(t_timestamp) / 1000.0
formatted_timestamp = datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S.%f')
Имейте в виду, что я получаю t_timestamp из сообщения amqp (RabbitMQ) через pika и использую «split», чтобы назначить полученную временную метку utc epoc/posix переменной в моей программе, а затем работать с ней, как показано выше.
Я искал несколько часов, прежде чем опубликовать этот вопрос, но не нашел решения и не понял, почему я не могу этого сделать, учитывая, что операторы печати дают точно такие же результаты - любая помощь будет очень признательна - спасибо.