Python中如何获取微秒级时间戳?
有没有办法在把Python的日期时间转换成时间戳时保持微秒级的准确性?
>>> 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 个回答
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
一样方便,然后再转换回日期。