datetime.now()的Python解析

datetime.now()的Python解析,python,windows,datetime,python-3.4,Python,Windows,Datetime,Python 3.4,我正在测试datetime.now()的分辨率。因为它假定输出为微秒,所以我希望每个打印都会不同 然而,我总是得到这样的东西 from datetime import datetime import time for i in range(1000): curr_time = datetime.now() print(curr_time) time.sleep(0.0001) 为什么会这样?有没有什么方法可以让我得到精确到微秒的时间戳?事实上我不需要微秒,但是如果能得

我正在测试
datetime.now()的分辨率。因为它假定输出为微秒,所以我希望每个打印都会不同

然而,我总是得到这样的东西

from datetime import datetime
import time
for i in range(1000):
    curr_time  = datetime.now()
    print(curr_time)
    time.sleep(0.0001)
为什么会这样?有没有什么方法可以让我得到精确到微秒的时间戳?事实上我不需要微秒,但是如果能得到0.1ms的分辨率就好了

==更新====

我将其与使用time.perf_counter()和添加到起始
datetime
从datetime导入datetime,timedelta 导入时间

...
2015-07-10 22:38:47.212073
2015-07-10 22:38:47.212073
2015-07-10 22:38:47.212073
2015-07-10 22:38:47.212073
2015-07-10 22:38:47.212073
2015-07-10 22:38:47.212073
2015-07-10 22:38:47.212073
2015-07-10 22:38:47.212073
2015-07-10 22:38:47.212073
2015-07-10 22:38:47.212073
2015-07-10 22:38:47.212073
2015-07-10 22:38:47.212073
2015-07-10 22:38:47.212073
2015-07-10 22:38:47.213074
2015-07-10 22:38:47.213074
2015-07-10 22:38:47.213074
2015-07-10 22:38:47.213074
2015-07-10 22:38:47.213074
2015-07-10 22:38:47.213074
2015-07-10 22:38:47.213074
2015-07-10 22:38:47.213074
2015-07-10 22:38:47.213074
2015-07-10 22:38:47.213074
2015-07-10 22:38:47.213074
...
我不确定它到底有多“准确”,但分辨率至少更高。。。。这似乎并不重要,因为我的电脑甚至不能以这么高的速度打印。对于我的目的,我只是需要不同的时间戳来区分不同的条目,这对我来说已经足够好了

datetime0 = datetime.now()
t0 = time.perf_counter()
for i in range(1000):
    print('datetime.now(): ', datetime.now())
    print('time.perf_counter(): ', datetime0 + timedelta(0, time.perf_counter()-t0))
    print('\n')

    time.sleep(0.000001)

这可能是系统上的
时间限制。sleep
,而不是
datetime.now()
。。。或者两者兼而有之您运行的是什么操作系统,Python的版本和发行版是什么?

您的系统可能无法提供
time.sleep
文档中提到的“亚秒精度”:

...
datetime.now():  2015-07-10 23:24:18.010377
time.perf_counter():  2015-07-10 23:24:18.010352


datetime.now():  2015-07-10 23:24:18.010377
time.perf_counter():  2015-07-10 23:24:18.010545


datetime.now():  2015-07-10 23:24:18.010377
time.perf_counter():  2015-07-10 23:24:18.010745


datetime.now():  2015-07-10 23:24:18.011377
time.perf_counter():  2015-07-10 23:24:18.010961


datetime.now():  2015-07-10 23:24:18.011377
time.perf_counter():  2015-07-10 23:24:18.011155


datetime.now():  2015-07-10 23:24:18.011377
time.perf_counter():  2015-07-10 23:24:18.011369


datetime.now():  2015-07-10 23:24:18.011377
time.perf_counter():  2015-07-10 23:24:18.011596


datetime.now():  2015-07-10 23:24:18.012379
time.perf_counter():  2015-07-10 23:24:18.011829


datetime.now():  2015-07-10 23:24:18.012379
time.perf_counter():  2015-07-10 23:24:18.012026


datetime.now():  2015-07-10 23:24:18.012379
time.perf_counter():  2015-07-10 23:24:18.012232


datetime.now():  2015-07-10 23:24:18.012379
time.perf_counter():  2015-07-10 23:24:18.012424


datetime.now():  2015-07-10 23:24:18.012379
time.perf_counter():  2015-07-10 23:24:18.012619


datetime.now():  2015-07-10 23:24:18.013380
time.perf_counter():  2015-07-10 23:24:18.012844


datetime.now():  2015-07-10 23:24:18.013380
time.perf_counter():  2015-07-10 23:24:18.013044


datetime.now():  2015-07-10 23:24:18.013380
time.perf_counter():  2015-07-10 23:24:18.013242


datetime.now():  2015-07-10 23:24:18.013380
time.perf_counter():  2015-07-10 23:24:18.013437


datetime.now():  2015-07-10 23:24:18.013380
time.perf_counter():  2015-07-10 23:24:18.013638


datetime.now():  2015-07-10 23:24:18.014379
time.perf_counter():  2015-07-10 23:24:18.013903


datetime.now():  2015-07-10 23:24:18.014379
time.perf_counter():  2015-07-10 23:24:18.014125


datetime.now():  2015-07-10 23:24:18.014379
time.perf_counter():  2015-07-10 23:24:18.014328


datetime.now():  2015-07-10 23:24:18.014379
time.perf_counter():  2015-07-10 23:24:18.014526


datetime.now():  2015-07-10 23:24:18.014379
time.perf_counter():  2015-07-10 23:24:18.014721


datetime.now():  2015-07-10 23:24:18.015381
time.perf_counter():  2015-07-10 23:24:18.014919

...
在装有CPython 2.7的amd64上的Linux 3.x上,我得到了一些非常接近您预期的0.0001时间步的结果:

sleep(...)
    sleep(seconds)

    Delay execution for a given number of seconds.  The argument may be
    a floating point number for subsecond precision.

我相信这取决于操作系统时钟,而操作系统时钟通常没有那么精确。时间戳的最大分辨率将取决于时间源的最大分辨率。我明白了。我正在使用Windows8。它的分辨率似乎是1ms。我想,在操作系统的情况下,没有办法超越这一点?如果你这样做会怎么样?我使用的是Windows8和Python34。我认为这是datetime.now()的问题。我试过计时。似乎每个循环都显示不同的时间。可能我需要将time.clock()中的值转换为datetime。很高兴知道。我建议如果还没有的话@tuzzer:
datetime.now()
具有微秒精度()--请检查
.resolution
属性。它没有提到在Windows()上可能是10毫秒到55毫秒(ms==毫秒)的精度。看见
2015-07-10 19:58:24.353711
2015-07-10 19:58:24.353879
2015-07-10 19:58:24.354052
2015-07-10 19:58:24.354227
2015-07-10 19:58:24.354401
2015-07-10 19:58:24.354577
2015-07-10 19:58:24.354757
2015-07-10 19:58:24.354938