在python中使用高精度时间戳

Bob*_*emi 5 python time datetime

嘿我在使用datetime工作在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]))
Run Code Online (Sandbox Code Playgroud)

这种作品,但我觉得应该有一个更简化的方式(我对python很新,我相信我这样做就像一个屁股).另外,我的时间戳中有纳秒,但在我的datetime对象中只有几微秒,是否有更好的模块可供使用?我需要能够在时间上进行操作,例如减去时间并将它们放入调度程序中.

有什么更好的办法吗?

Yar*_*riv 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')
Run Code Online (Sandbox Code Playgroud)


Sam*_*m P 5

datetime仅精确到微秒。即10e-6

所以

14.078685237
Run Code Online (Sandbox Code Playgroud)

将被截断到

14.078685
Run Code Online (Sandbox Code Playgroud)

如果您执行上述操作。

最好只将秒保持在内float,并执行一些浮点模数运算来跟踪此情况。

我发现datetime没有做到这一点很荒谬。

对于那些说时钟不够准确的人。那不是唯一的用例。当您从远处来回转换时。(乘以光速。)1微秒是300m。300米是3个足球场的长度。这是完全废话的准确性。


Rob*_*wie 2

您的方法本质上没有什么问题,但您可能想尝试pyiso8601dateutil

  • `pyiso8601` 和 `dateutil` 都返回仅具有微秒精度的 `datetime` 对象。OP需要纳秒精度,例如[`numpy.datetime64`](http://stackoverflow.com/a/20100652/4279)提供的精度 (2认同)