在Python中处理高精度时间戳

6 投票
5 回答
16527 浏览
提问于 2025-04-16 18:47

嘿,我正在用Python处理日期和时间,我想知道解析这个时间戳的最佳方法是什么。

这些时间戳是符合ISO标准的,举个例子就是“2010-06-19T08:17:14.078685237Z”。

到目前为止,我用的是

time = datetime.datetime.strptime(timestamp.split(".")[0], "%Y-%m-%dT%H:%M:%S")
precisetime = time + datetime.timedelta(0,float("." + timestamp[:-1].split(".")[0]))

这个方法有点用,但我觉得应该有更简单的方法(我对Python还很陌生,可能做得不太好)。另外,我的时间戳里有纳秒,但我的日期时间对象里只有微秒,有没有更好的模块可以使用?我需要能对时间进行操作,比如减去两个时间,或者把它们放到调度器里。

有没有更好的方法呢?

5 个回答

6

datetime 这个东西的精确度只能到微秒,也就是百万分之一秒。

所以

14.078685237

会被截断成

14.078685

如果你像上面那样做的话。

其实更好的办法是把小于一秒的部分单独用一个 float 来存储,然后用一些浮点数的取余运算来跟踪这些小数部分。

我觉得 datetime 不这样做真是太荒谬了。

还有那些说时钟不够准确的人。其实这不是唯一的使用场景。当你在距离和时间之间转换的时候(比如乘以光速),

1 微秒相当于 300 米。

300 米大约是三个足球场的长度,这样的精度真是太糟糕了。

8

你可以使用Numpy的datetime64功能:http://docs.scipy.org/doc/numpy-dev/reference/arrays.datetime.html

它支持纳秒和更高的精度。

>>> import numpy as np
>>> np.version.version
'1.7.1'
>>> np.datetime64("2010-06-19T08:17:14.078685237Z", dtype="datetime64[ns]")
numpy.datetime64('2010-06-19T08:17:14.078685237+0000')
2

你的方法其实没有什么特别糟糕的地方,不过你可以试试 pyiso8601 或者 dateutil 这两个库。

撰写回答