繁体   English   中英

datetime.now() 函数在 Python 中每 5 毫秒生成一次时间

[英]datetime.now() function generate time every 5 milisecods in Python

嗨,我有简单代码的问题:

from datetime import datetime
import datetime as dt

while True:
    now = dt.datetime.now().strftime("%Y%m%d%H%M%S%f")
    print(now)

我不是连续收到时间戳,而是每 5 毫秒,20180226173710394770 20180226173710399770 等。

如何用其他函数替换 .now() 函数以获取毫秒/微秒的时间戳。

谢谢

首先,不要在创建时间后立即尝试打印时间,创建一个列表(打印可能需要一些时间并且您正在尝试调试时间敏感的问题,在这种情况下这不是问题而是一件好事记得玩时间的时候......)

times = [dt.datetime.now().strftime("%Y%m%d%H%M%S|%f") for _ in range(1000)]

然后您可以查看您生成的值 - 其中很多仍然相同

过滤它们并打印它们以查看它们(划分微秒以使比较更明显)

print(sorted(set(times)))
>>>['20180226192911|002542', '20180226192911|003544', '20180226192911|004547', '20180226192911|005549', '20180226192911|006552']

我们可以看到这些值间隔大约 1000 微秒,这不是因为我们每毫秒只能生成一个值(我们的列表有更多的值,但它们没有改变)而是因为 datetime 函数没有精度高于 1 毫秒 - 这是由您的操作系统引起的(旧 PC 的精度可能低于 16 毫秒,不同的操作系统也可能有不同的结果)

各种实时函数的精度可能低于表示其值或参数的单位所建议的精度。 例如,在大多数 Unix 系统上,时钟“滴答”每秒仅 50 或 100 次。 https://docs.python.org/3/library/time.html

所以除了在循环中使用打印之外,您看到的 5ms 差异很可能是由您的操作系统提供的时钟引起的 - 它不够精确

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM