Python 秒的小数部分
在Python中,处理秒以下的时间段最好的方法是什么呢?datetime这个库非常好用,但我发现它似乎不能处理小于一秒的时间单位。
4 个回答
5
为了得到更好的答案,你需要把问题说得更清楚一些。不过,这段内容至少可以让你了解一下datetime是如何处理微秒的:
>>> from datetime import datetime
>>> t=datetime.now()
>>> t.microsecond
519943
6
我喜欢一种不同的、没有提到的方法:
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
53
在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'
datetime和time类只接受整数输入,小时、分钟和秒必须在0到59之间,而微秒必须在0到999999之间。不过,timedelta类可以接受带小数的值,并会为你自动处理好相关的计算:
>>> span = timedelta(seconds=3662.567)
>>> span
datetime.timedelta(0, 3662, 567000)
timedelta的基本组成部分是天、秒和微秒(上面的例子是0天、3662秒和567000微秒),但它的构造函数也可以接受毫秒、小时和周。所有的输入都可以是整数或浮点数(正数或负数)。所有参数都会被转换成基本单位,然后进行规范化,确保0 <= 秒 < 60,0 <= 微秒 < 1000000。
你可以将这个时间跨度加到一个datetime或time实例上,或者与另一个时间跨度相加或相减。多试试,你可能会轻松想出一些函数或类,来实现你想要的功能。你可以使用timedelta实例来处理所有的日期/时间,参考某个固定的datetime,比如basetime = datetime(2000,1,1,0,0,0)
,然后再转换成datetime或time实例以便显示或存储。