【发布时间】:2016-11-03 21:33:55
【问题描述】:
我是 python (2.7) 新手,我有两个包含时间戳的变量 - 我需要以秒/微秒为单位找出它们之间的差异。
我花了将近一整天的时间试图弄清楚如何做到这一点并且被难住了 - 所以你能帮我指出正确的方向吗,请记住我是 python 新手,所以我需要简单解释一下.
我已经搜索了 Stackoverflow,但没有看到任何可以帮助我解决此问题的问题/答案,或者如果他们这样做了,我不明白如何......因为他们要么使用不同版本的 python,要么使用已知的时间戳值,其中我的变量是在程序运行时生成的......
首先,我导入以下模块来处理日期和时间值:
from datetime import *
from time import *
然后我从一条 posix (utc) 格式的 amqp 消息中收到一个时间戳值,因此我使用以下方法对其进行转换:
== 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')
请记住,我通过 pika 从 amqp (RabbitMQ) 消息接收 t_timestamp,我使用“split”将接收到的 utc epoc/posix 时间戳分配给我的程序中的一个变量,然后使用它直接显示以上。
鉴于打印语句产生完全相同的结果 - 任何帮助将不胜感激 - 谢谢。
强>【问题讨论】:
-
您需要减去两个
datetime对象,而不是它们的字符串表示形式。当您将对象放入print时,它会隐式调用str(obj),这就是它们打印相同的原因。 -
如果您有时间戳,请执行
timestamp1 - timestamp2以获取以毫秒为单位的差异。顺便说一句:不要将对象datetime转换为string- 做datetime1 - datetime2。 -
是的,基本上,当您使用
strftime时,结果不再是timestamp,因为它是datetime对象。它只是一个不知道日期和时间的普通字符串。 -
感谢所有人 - 但@juanpa.arrivillaga,我想你可能已经帮我找到了解决方案 - 我将代码更改为 'ts = int(t_timestamp) tick_timestamp = datetime.fromtimestamp(ts / 1e3 )' 我现在可以减去时间戳 - 非常感谢大家!
标签: python python-2.7 datetime math timestamp