相关文章推荐
帅气的领带  ·  【Pyspark ...·  2 周前    · 
近视的橙子  ·  python ...·  2 周前    · 
腼腆的烈马  ·  [Anaconda]——Linux下cond ...·  1 周前    · 
眉毛粗的电梯  ·  python ...·  6 天前    · 
沉着的抽屉  ·  python for循环 ...·  2 天前    · 

Python的几分之几秒

30 人关注

在Python中处理一秒钟的部分的最好方法是什么? datetime库很好,但就我所知,它不能处理任何小于一秒的单位。

3 个评论
你用秒针做什么?你想用秒针做什么?
如果我试图对一个像 Timestamp('2019-01-28 09:33:36.110000') 这样的值进行粗化, datetime.strptime(str(d),'%Y-%m-%d %H:%M:%S' 会给我一个错误。"未转换的数据仍然是:.110000"。 我可以在strptime中加入什么屏蔽参数来处理小数点后的秒数?
@Suzanne 小数秒由%f处理,通常在前面加一个字面的.
python
datetime
TimothyAWiseman
TimothyAWiseman
发布于 2009-12-05
4 个回答
Don O'Donnell
Don O'Donnell
发布于 2009-12-05
已采纳
0 人赞同

在datetime模块中,datetime、time和timedelta类都有最小的分辨率,即微秒。

>>> from datetime import datetime, timedelta
>>> now = datetime.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到99999之间。 然而,timedelta类将接受带分数的浮点值,并为你做所有适当的模数运算。

>>> span = timedelta(seconds=3662.567)
datetime.timedelta(0, 3662, 567000)

The basic components of timedelta are day, second and microsecond (0, 3662, 567000 above), but the constructor will also accept milliseconds, hours and weeks. All inputs may be integers or floats (positive or negative). All arguments are converted to the base units and then normalized so that 0 <= seconds < 60 and 0 <= microseconds < 1000000.

你可以把跨度加减到一个日期时间或时间实例或另一个跨度上。 仔细琢磨一下,你可能很容易想出一些函数或类来做你想要的事情。 你可以使用相对于某个固定日期时间的timedelta实例来处理所有的日期/时间,比如basetime = datetime(2000,1,1,0,0,0),然后转换为日期时间或时间实例来显示或存储。

@timothy:不客气,很高兴我可以帮助你。如果这是你接受的答案,我将感谢你的检查。谢谢。
谢谢你的帮助 -- docs.python.org/3.7/library/time.html 没有列出 .%f 作为格式字符串的小数秒的选项。
Pablo Santa Cruz
Pablo Santa Cruz
发布于 2009-12-05
0 人赞同

一个不同的,没有提到的方法,我喜欢。

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
    
ChristopheD
ChristopheD
发布于 2009-12-05
0 人赞同

为了得到更好的答案,你需要进一步说明你的问题,但这至少应该表明如何 datetime可以处理微秒数 :

>>> from datetime import datetime
>>> t=datetime.now()
>>> t.microsecond
519943