簡體   English   中英

在Python中找出事件的持續時間

[英]Figuring out duration of an event in Python

這是一個非常討厭的問題,所以我提前致歉!

我有兩個開始和結束活動的時間戳。 它們存儲為UTC中的datetime.datetime。 我需要做的是弄清楚事件的持續時間。

我嘗試從另一個減去一個,但收到錯誤:

Traceback (most recent call last):
02.
File '/base/python_lib/versions/1/google/appengine/ext/webapp/__init__.py', line 509, in __call__
03.
handler.post(*groups)
04.
File '/base/data/home/apps/.../3.340324527833140591/main.py', line 441, in post
05.
call_record.Duration = call_record.CallStartTime - call_record.CallEndTime
06.
File '/base/python_lib/versions/1/google/appengine/ext/db/__init__.py', line 472, in __set__
07.
value = self.validate(value)
08.
File '/base/python_lib/versions/1/google/appengine/ext/db/__init__.py', line 2322, in validate
09.
(self.name, self.data_type.__name__))
10.
BadValueError: Property Duration must be a datetime
11.

GAE中的CallStartTime,CallEndTime和Duration都是db.DateTimeProperty()類型。

我以前曾使用django timesince來顯示持續時間,但是我需要做一些額外的計算才能得出平均值。 事件的持續時間。

任何有關其他信息可能會有所幫助的建議或指針,將不勝感激!

將一個datetime與另一個datetime時間相減會得到一個timedelta 如果需要,可以使用該datetime創建另一個datetime ,方法是將其添加到另一個datetime對象或從另一個datetime對象中減去。

但是,如何用單個datetime對象表示持續時間呢?

兩個datetime.datetime對象的區別是datetime.timedelta對象:

In [2]: t1=datetime.datetime.now()

In [3]: t1
Out[3]: datetime.datetime(2010, 3, 5, 12, 34, 6, 402507)

In [4]: t2=datetime.datetime.now()

In [5]: dt=t2-t1

In [6]: dt
Out[6]: datetime.timedelta(0, 8, 911129)

timedelta ■找dayssecondsmicroseconds屬性。

In [7]: dt.seconds
Out[7]: 8

如果timedelta跨越天的持續時間,那么你就需要未來的日子秒太:

In [8]: dt.days*(3600*24)+dt.seconds
Out[8]: 8

有關timedelta的更多信息,請參見http://docs.python.org/library/datetime.html#timedelta-objects

對於這樣的事情,我總是使用time.time(),它會返回一個不錯的浮點數,然后主要將其格式化如下:

import time

t1 = time.time()

someLongTakingFunction()

print "Function took %.2f" % (time.time() - t1)

這對於快速和骯臟的檢查非常有用,但是據推測,有更好的方法來衡量性能。 90%的時間對我來說一直都是有效的。

暫無
暫無

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

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