gpt4 book ai didi

python - 为什么 Python 的 datetime.utcnow() 总是返回相同的微秒值?

转载 作者:太空狗 更新时间:2023-10-30 01:13:57 25 4
gpt4 key购买 nike

我正在使用 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 专业版,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)

我仍然对为什么这会/可能首先发生感兴趣,所以如果有人有任何额外的信息,那将是很好的。遗憾的是,我不知道我是否能够复制它...

最佳答案

有一个古老的笑话,讲的是自然历史博物馆的两个人想知道恐龙化石的年龄。一名守卫无意中听到他们说:“哦,它已经有五亿零七年了”。一位知情人士说:“这是一个惊人的数字,它是如何确定的?”守卫说:“嗯,我在入职培训时被告知它有五亿年的历史,那是七年前的事了。”

这是两次以不同精度级别相加的结果。假设我在 12:03:06 启动一个时钟,而那个时钟只有分钟分辨率。如果我将时钟上的时间添加到开始时间,我将得到一系列时间,例如 12:03:06、12:04:06、12:05:06 等等。

Windows 将时间从具有毫秒分辨率和任意开始时间的单调时钟添加到该时钟以微秒分辨率读取零的时间。

一种常见的技术是简单地将时间四舍五入到您所依赖的分辨率,当然不能高于时钟的保证分辨率。我相信这个时钟的保证分辨率是 10 毫秒。

关于python - 为什么 Python 的 datetime.utcnow() 总是返回相同的微秒值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33746562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com