Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python datetime中损失的微秒数_Python_Datetime - Fatal编程技术网

Python datetime中损失的微秒数

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

我试图得到微秒,但最后三位数总是0,所以我想我只能得到毫秒。 这是操作系统的问题吗?我使用的是带有Python 2.7.10的Win7x64。 我做错什么了吗?否则我怎么能得到微秒呢

>>> 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在某些情况下速度较慢的文章,它似乎与我编写的代码相匹配。没有理由提出新问题。但是谢谢:)