在Python中处理高精度时间戳
嘿,我正在用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')