在Python中处理部分秒的最佳方法是什么?日期时间库非常好,但据我所知,它不能处理任何不到一秒钟的单位。
答案 0 :(得分:27)
在datetime模块中,datetime,time和timedelta类都具有最小的微秒分辨率:
>>> from datetime import datetime, timedelta
>>> now = datetime.now()
>>> now
datetime.datetime(2009, 12, 4, 23, 3, 27, 343000)
>>> now.microsecond
343000
如果要显示带小数秒的日期时间,只需插入小数点并去掉尾随零:
>>> now.strftime("%Y-%m-%d %H:%M:%S.%f").rstrip('0')
'2009-12-04 23:03:27.343'
日期时间和时间类只接受整数输入,小时,分钟和秒必须介于0到59之间,微秒必须介于0到999999之间。但是,timedelta类将接受带有分数的浮点值并执行所有操作适合你的模运算:
>>> span = timedelta(seconds=3662.567)
>>> span
datetime.timedelta(0, 3662, 567000)
timedelta的基本组件是白天,秒和微秒(0,3662,567000以上),但构造函数也将接受毫秒,小时和周。所有输入可以是整数或浮点数(正数或负数)。所有参数都被转换为基本单位,然后归一化,使得0 <=秒&lt; 60和0 <=微秒&lt;百万。
您可以将范围添加或减去日期时间或时间实例或另一个范围。愚弄它,你可以很容易地想出一些函数或类来做你想要的东西。您可以使用相对于某个固定日期时间的timedelta实例进行所有日期/时间处理,例如basetime = datetime(2000,1,1,0,0,0)
,然后转换为日期时间或时间实例以进行显示或存储。
答案 1 :(得分:4)
要获得更好的答案,您需要进一步指明您的问题,但这至少应该显示datetime can handle microseconds:
>>> from datetime import datetime
>>> t=datetime.now()
>>> t.microsecond
519943
答案 2 :(得分:1)
NumPy 1.4(在候选发布阶段)支持自己的Date和DateArray对象。一个优点是它支持小于飞秒的频率:http://projects.scipy.org/numpy/browser/trunk/doc/neps/datetime-proposal.rst
否则我会使用常规日期时间亚秒频率。
答案 3 :(得分:1)
我喜欢的另一种未提及的方法:
from datetime import datetime
from time import sleep
t0 = datetime.now()
sleep(3)
t1 = datetime.now()
tdelta = t1 - t0
print(tdelta.total_seconds())
# will print something near (but not exactly 3)
# 3.0067
答案 4 :(得分:-1)
出于什么目的?导入时间 - &gt; time.clock()以毫秒为单位返回当前时间,因此它可以用于计时目的,达到毫秒精度。