我试图得到微秒,但最后三位数字总是0,所以我想我只能得到毫秒。这是操作系统的问题吗?我在Win7x64与Python 2.7.10。我做错了什么吗?不然怎么能得到微秒呢?
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2016, 8, 9, 4, 33, 28, 504000)
这不是
的重复在Python中使用%f和strftime()来获取微秒
,因为这种方法在末尾会给我相同的零。
我相信这是Python 2.7在Windows下实现的一个已知限制:
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2016, 8, 9, 10, 50, 59, 657000)
>>> datetime.datetime.now()
datetime.datetime(2016, 8, 9, 10, 51, 1, 561000)
>>> datetime.datetime.now()
datetime.datetime(2016, 8, 9, 10, 51, 2, 314000)
>>> datetime.datetime.now()
datetime.datetime(2016, 8, 9, 10, 51, 2, 906000)
>>> datetime.datetime.now()
datetime.datetime(2016, 8, 9, 10, 51, 9, 277000)
请看,例如,这里和这里。
在Python 2.7源代码中,函数Modules/datetimemodule.c/datetime_now()
最终调用Modules/timemodule.c/floattime()
,它有以下注释:
/* There are three ways to get the time:
(1) gettimeofday() -- resolution in microseconds
(2) ftime() -- resolution in milliseconds
(3) time() -- resolution in seconds
In all cases the return value is a float in seconds.
Since on some systems (e.g. SCO ODT 3.0) gettimeofday() may
fail, so we fall back on ftime() or time().
Note: clock resolution does not imply clock accuracy! */
因此,Windows平台显然是使用ftime()
来获取当前时间,并且,根据MSDN页面的_ftime()
(毫无疑问,它最终在),没有微秒可用。因此,Python 2.7只给出毫秒数,并将微秒值保留为零:
return (double)t.time + (double)t.millitm * (double)0.001;
Python 3.5似乎有一个完整的微秒分辨率,所以你可能要考虑切换到它(好像大量的其他改进还不够)。