Python中微秒级别的时间戳准确吗?

7
有没有一种方法可以在将Python datetime转换为时间戳时保持微秒精度?
>>> import datetime
>>> d1 = datetime.datetime(2013,7,31,9,13,8,829)
>>> import time
>>> d1_ts = time.mktime(d1.timetuple())
>>> d1
datetime.datetime(2013, 7, 31, 9, 13, 8, 829)
>>> d1_ts
1375279988.0
>>> d1.fromtimestamp(d1_ts)
datetime.datetime(2013, 7, 31, 9, 13, 8)

转换中我损失了.829。这非常重要,因为我有开始和结束时间戳,需要以设定间隔(带有次秒步长)进行步进,从一些传感器收集数据。

最终它将用于类似于此函数的功能:

from scipy import arange
sample_time = 0.02
for i in arange(d1_ts, d2_ts, sample_time):
    # do stuff

使用如此小的sample_time,微秒变得非常重要。


1
如果你只想在Windows中使用Python获取毫秒或微秒级别的时间戳,可以使用QPC时钟,它具有亚微秒级别的分辨率。这里演示了访问Windows中此时钟的Python代码:https://dev59.com/AFoT5IYBdhLWcg3wpg5a - Gabriel Staples
1个回答

9
import datetime as DT
d1 = DT.datetime(2013, 7, 31, 9, 13, 8, 829)
epoch = DT.datetime(1970, 1, 1)

print(d1.timestamp()) #  python3
# 1375276388.000829
print((d1 - epoch).total_seconds())  # python2
# 1375261988.000829

另外需要注意的是,如果您使用的是NumPy 1.7或更新版本,则可以使用np.datetime64

In [23]: x = np.datetime64(d1)

In [24]: x.view('<i8')/1e6
Out[24]: 1375261988.000829

In [38]: x.astype('<i8').view('<M8[us]')
Out[38]: numpy.datetime64('2013-07-31T05:13:08.000829-0400')

In [40]: x.astype('<i8').view('<M8[us]') == x
Out[40]: True

由于np.datetime64提供了一种简单的方法将日期转换为8字节的ints,因此在进行算术运算时,它们可以非常方便地用作ints,然后再转换为日期。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接