Python datetime中损失的微秒数
我试图得到微秒,但最后三位数总是0,所以我想我只能得到毫秒。 这是操作系统的问题吗?我使用的是带有Python 2.7.10的Win7x64。 我做错什么了吗?否则我怎么能得到微秒呢Python datetime中损失的微秒数,python,datetime,Python,Datetime,我试图得到微秒,但最后三位数总是0,所以我想我只能得到毫秒。 这是操作系统的问题吗?我使用的是带有Python 2.7.10的Win7x64。 我做错什么了吗?否则我怎么能得到微秒呢 >>> import datetime >>> datetime.datetime.now() datetime.datetime(2016, 8, 9, 4, 33, 28, 504000) 这不是一个复制品 因为这种方法在最后给了我同样的零。我相信这是Windows下Py
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2016, 8, 9, 4, 33, 28, 504000)
这不是一个复制品
因为这种方法在最后给了我同样的零。我相信这是Windows下Python 2.7实现的一个已知限制: 导入日期时间 >>>datetime.datetime.now() datetime.datetime(2016,8,9,10,50,59657000) >>>datetime.datetime.now() datetime.datetime(2016,8,9,10,51,1561000) >>>datetime.datetime.now() datetime.datetime(2016,8,9,10,51,2314000) >>>datetime.datetime.now() datetime.datetime(2016,8,9,10,51,2906000) >>>datetime.datetime.now() datetime.datetime(2016,8,9,10,51,9277000) 例如,请参见和 在Python 2.7源代码中,函数
Modules/datetimemodule.c/datetime\u now()
最终调用Modules/timemodule.c/floattime()
,其注释如下:
/*获取时间有三种方法:
(1) gettimeofday()--以微秒为单位的分辨率
(2) ftime()--以毫秒为单位的分辨率
(3) 时间()--以秒为单位的分辨率
在所有情况下,返回值都是以秒为单位的浮点值。
因为在某些系统(例如SCO ODT 3.0)上,gettimeofday()可能
失败,所以我们只能依靠ftime()或time()。
注意:时钟分辨率并不意味着时钟精度*/
因此,Windows平台显然是在使用ftime()
获取当前时间,并且根据(毫无疑问,最终结果是)没有微秒可用。因此,Python 2.7只给出毫秒,并将微秒保留为零:
return (double)t.time + (double)t.millitm * (double)0.001;
Python 3.5看起来有一个完整的微秒分辨率,所以你可能会考虑切换到那个(好像大量的其他改进还不够)。在LMDE Betsy(Linux)64位和Python 2.7.9上,我可以得到微秒:
datetime.datetime(2016,8,9,12,46,14209624)
这里是使用Python 2.7.10的OS X的输出:datetime.datetime(2016,8,8,19,49,23952833)
。在温多泽,我得到了datetime.datetime(2016,8,8,19,49,23952000)
。。。所以我想说Fred搞定了。相关:,这不是Windows的一般限制,但可能是Python 2.7使用的API的限制。至少在Windows 10中,使用Python 3.5.1,datetime.datetime.now()
为我填充微秒的三位数,例如>>datetime.datetime.now()
,datetime.datetime(2016,8,8,23,7,13,646615)
@Shadow,是的,与其说是Windows的限制,不如说是Python对Windows API的使用。编辑以正确分配责备:-)@doc,这听起来像是一个新SO问题的极好标题。我读过一些关于Python3在某些情况下速度较慢的文章,它似乎与我编写的代码相匹配。没有理由提出新问题。但是谢谢:)