[英]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
对象的区别是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
的更多信息,请参见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.