在Python中计算事件持续时间

2 投票
3 回答
2202 浏览
提问于 2025-04-15 20:03

这是一个非常初学者的问题,所以我提前道歉!

我有两个时间戳,分别表示事件的开始和结束时间。它们是以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.

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

我之前使用过django的timesince来显示持续时间,但我需要进行一些额外的计算,以便找出事件的平均持续时间。

如果有任何建议或提示,告诉我哪些额外的信息可能会有帮助,我将非常感激!

3 个回答

0

对于这种情况,我总是使用 time.time(),它会返回一个很好的浮点数,然后我通常会把它格式化成这样:

import time

t1 = time.time()

someLongTakingFunction()

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

这种方法适合快速简单的检查,但据说还有更好的性能测量方法。不过,90%的时候,这个方法对我来说总是有效。

1

两个 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 对象有 days(天数)、seconds(秒数)和 microseconds(微秒数)这几个属性。

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

如果这个 timedelta 表示的时间跨度是以天为单位的,那么你还需要把天数转换成秒数:

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

想了解更多关于 timedelta 的信息,可以查看 这个链接

5

把一个 datetime 减去另一个 datetime,你会得到一个 timedelta。这个 timedelta 可以用来创建另一个 datetime,你只需要把它加到或减去另一个 datetime 对象上就行。

不过,如何用一个单独的 datetime 对象来表示一个持续时间呢?

撰写回答