Python 如何将正常运行时间转换为日期时间?

Python 如何将正常运行时间转换为日期时间?,python,linux,time,Python,Linux,Time,我正在使用一个API,该API向我返回某些事件的系统正常运行时间,如下所示: 8185.16 def uptime(): with open('/proc/uptime') as f: uptime = float(f.read().split()[0]) now = datetime.datetime.now().timestamp() return uptime, now, now - uptime 我想将其转换为unix时间,以便

我正在使用一个API,该API向我返回某些事件的系统正常运行时间,如下所示:

8185.16
def uptime():
    with open('/proc/uptime') as f:
        uptime = float(f.read().split()[0])
        now = datetime.datetime.now().timestamp()
        return uptime, now, now - uptime
我想将其转换为unix时间,以便能够判断此事件何时发生在当前计算机的范围之外。问题是,我似乎找不到任何现有的代码可以做到这一点

我尝试编写一个函数来计算unix时间和正常运行时间之间的增量,然后将其应用于所有度量。看起来是这样的:

8185.16
def uptime():
    with open('/proc/uptime') as f:
        uptime = float(f.read().split()[0])
        now = datetime.datetime.now().timestamp()
        return uptime, now, now - uptime
但问题是,它的工作速度不够快,造成了高达10毫秒的误差,我宁愿避免这种情况。例如,在这两次运行之间,增量从1604944228.561784变化到1604944228.5529969,即8.7ms

In [252]: time uptime()
CPU times: user 1.26 ms, sys: 209 µs, total: 1.47 ms
Wall time: 1.67 ms
Out[252]: (8625.91, 1604952854.471784, 1604944228.561784)

In [250]: time uptime()
CPU times: user 0 ns, sys: 1.57 ms, total: 1.57 ms
Wall time: 1.25 ms
Out[250]: (8624.89, 1604952853.442997, 1604944228.5529969)
是否有现有的代码可以给我提供更可靠的结果,或者是否有其他方法可以更快地解决这个问题

目前,我正在运行这10000次,并使用这10000个值的平均值,但对我来说,这似乎不是一个好的解决方案


谢谢您抽出时间。

但是。。您不需要读取每次测量的正常运行时间。你只需要读一次,就可以计算计算机何时启动。然后将事件时间戳添加到启动时间戳中,您将获得事件发生的时间。因此,您的事件发生在
8185.16+psutil.boot_time()
@KamilCuk,这是正确的。我只计算一次。我展示了两个不同的结果,因为运行几次可能会产生10毫秒不等的结果。这意味着如果我运气不好,所有的计算都会被移动10毫秒,这是我宁愿避免的。@KamilCuk,不幸的是我不能使用psutil.boot_time(),因为它只返回秒,不是ms。所以这样的精度损失会更高。在linux上有
CLOCK\u BOOTTIME
来自
CLOCK\u gettime
——它应该是最快的。