簡體   English   中英

Python 2.7-如何找到以秒/微秒為單位的兩個datetime.fromtimestamp(ts).strftime('%Y-%m-%d%H:%M:%S.%f')時間戳之間的差異?

[英]Python 2.7 - how can I find the difference between two datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S.%f') timestamps in seconds/microseconds?

我是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_timestamplocal_time變量,它們在格式方面看起來完全相同...

2016-11-03 21:05:37.512000 and 2016-11-03 21:05:38.045000 

如果我然后嘗試將兩個變量彼此相減,以便可以以秒/微秒為單位查看formatted_timestamplocal_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時間戳分配給程序中的變量,然后如上所示直接使用它。

考慮到打印語句產生的結果完全相同,我已經搜索了數小時才發布此問題,而沒有找到解決方案或為什么我不能這樣做,謝謝您的幫助。

python3.5中的替代解決方案

#!/usr/bin/env python3
import datetime as dt

t1 = dt.datetime.strptime("2016-11-03 21:12:08.319000", "%Y-%m-%d %H:%M:%S.%f")
t2 = dt.datetime.strptime("2016-11-03 21:12:12.299000", "%Y-%m-%d %H:%M:%S.%f")

delta = t2 - t1
print("Time difference: {}".format(delta))
print("Seconds: {}".format(delta.seconds))
print("Microseconds: {}".format(delta.microseconds))

輸出量

Time difference: 0:00:03.980000
Seconds: 3
Microseconds: 980000

感謝那些發表評論或發表答案的人,但是juanpa.arrivillaga評論了一些內容,使我想到了,所以我進行了搜索,最終更改了如下所示的代碼,現在我可以做所需的事情了-非常感謝所有人-我能夠在您的幫助下很快解決此問題!

== t_timestamp is acquired from an amqp message== 
`ts = int(t_timestamp)
tick_timestamp = datetime.fromtimestamp(ts / 1e3)

local_time = datetime.utcnow()

tstamp_age = (local_time - tick_timestamp)

現在打印為

 21:59:57.001000 1478210397001 0:00:00.060000

這對我來說很好,因為我只想將tstamp_age存儲在一個變量中以作比較。

再次謝謝大家

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM