【发布时间】:2015-07-12 00:11:59
【问题描述】:
from datetime import datetime
import time
for i in range(1000):
curr_time = datetime.now()
print(curr_time)
time.sleep(0.0001)
我正在测试datetime.now() 的分辨率。由于它假设以微秒为单位输出,因此我预计每次打印都会有所不同。
但是,我总是得到类似的东西。
...
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
...
为什么会这样?有什么方法可以将准确的时间戳精确到微秒?其实我不需要微秒,但能得到 0.1ms 的分辨率就好了。
=== 更新 ====
我将它与使用 time.perf_counter() 并添加到起始 datetime 进行了比较
从日期时间导入日期时间,时间增量
进口时间
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)
我不确定它到底有多“准确”,但分辨率至少更高......这似乎并不重要,因为我的电脑甚至无法以如此高的速度打印。对于我的目的,我只需要不同的时间戳来区分不同的条目,这对我来说已经足够了。
...
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
...
【问题讨论】:
-
我确定这取决于操作系统时钟,而操作系统时钟通常不是那么精确。
-
时间戳的最大分辨率取决于时间源的最大分辨率。
-
我明白了。我使用的是 Windows 8。它似乎有 1ms 的分辨率。我想在给定操作系统的情况下没有办法超过?
标签: python windows datetime python-3.4