【发布时间】:2016-02-18 05:04:34
【问题描述】:
我正在使用 Python 的 datetime.datetime.utcnow() 方法,我注意到微秒值始终相同。
>>> import datetime
>>> datetime.datetime.utcnow()
datetime.datetime(2015, 11, 16, 23, 20, 46, 42286)
>>> datetime.datetime.utcnow()
datetime.datetime(2015, 11, 16, 23, 20, 55, 505286)
>>> datetime.datetime.utcnow()
datetime.datetime(2015, 11, 16, 23, 21, 1, 552286)
请注意微秒值始终为 286。为什么会这样?我能做些什么来解决这个问题?
更多信息:time.time() 也总是有 286us。毫秒值很好。我认为这实际上是根本原因,因为我相信 datetime.datetime.utcnow() 调用 time.time()。
这是一个简短的脚本,表明这不仅仅是运气:
import datetime, random, time
for wait_time in [random.random() for _ in range(10)]:
time.sleep(wait_time)
print("Waited {}, result {}".format(wait_time, datetime.datetime.utcnow()))
结果:
Waited 0.6074311218736113, result 2015-11-16 23:35:24.603286
Waited 0.960317012489652, result 2015-11-16 23:35:25.563286
Waited 0.13555474339177553, result 2015-11-16 23:35:25.698286
Waited 0.6179213307667111, result 2015-11-16 23:35:26.315286
Waited 0.2872301475401443, result 2015-11-16 23:35:26.602286
Waited 0.42578113509089066, result 2015-11-16 23:35:27.027286
Waited 0.647233264729425, result 2015-11-16 23:35:27.674286
Waited 0.38930513172405146, result 2015-11-16 23:35:28.063286
Waited 0.6500370260649043, result 2015-11-16 23:35:28.713286
Waited 0.9807308512288959, result 2015-11-16 23:35:29.693286
谢谢,
系统信息:
- Win32 上的 Python 3.4.3(v3.4.3:9b73f1c3e601,2015 年 2 月 24 日,22:44:40)[MSC v.1600 64 位 (AMD64)]
- Windows 7 Professional,Service Pack 1. 64 位。
- 英特尔酷睿 i5-2400 @ 3.10GHz
time.get_clock_info() 的结果
Name Adjustable Implementation Monotonic Resolution (seconds)
============ ========== ========================= ========= ====================
clock False QueryPerformanceCounter() True 3.3106597e-07
monotomic False GetTickCount64() True 0.015600099999
perf_counter False QueryPerformanceCounter() True 3.3106597e-07
process_time False GetProcessTime() True 1e-7
time True GetSystemTimeAsFileTime() False 0.015600099999
最终编辑:
所以,我第二天早上回来(电脑整晚都开着),我再次启动了 python 解释器,现在一切都很好!
什么鬼,伙计?
>>> datetime.datetime.utcnow()
datetime.datetime(2015, 11, 17, 17, 19, 17, 626982)
>>> datetime.datetime.utcnow()
datetime.datetime(2015, 11, 17, 17, 19, 18, 234043)
>>> datetime.datetime.utcnow()
datetime.datetime(2015, 11, 17, 17, 19, 19, 106130)
>>> datetime.datetime.utcnow()
datetime.datetime(2015, 11, 17, 17, 20, 7, 707990)
我仍然对为什么会/可能首先发生这种情况感兴趣,所以如果有人有任何额外的信息,那就太好了。可悲的是我不知道我是否能够复制它......
【问题讨论】:
-
好时机?我无法复制它。
-
每次给我打电话时看起来都不一样。
datetime.datetime(year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]])。年、月、日、时相同。我猜你的系统时钟没有输出那个精度……我们说的是纳秒,而不是微秒。 -
您计算机上的系统时钟很可能没有必要的精度来处理这些微秒数。我不确定为什么最后 3 位数字不是 000。
-
不,随机等待总是会产生相同的 286us 值。再加上它连续发生 30 次的几率非常小。我只是碰巧在原始帖子中展示了其中的 3 个。
-
你的处理器是什么?
标签: python datetime python-3.x python-3.4 python-datetime