需要一个微秒为十进制的时间戳

时间:2015-06-16 19:40:02

标签: python datetime microtime

目前我正在使用time.time()来创建包含microtime的时间戳。但主要是我将这些与小数进行比较,time.time()返回一个浮点数。

目前我在需要时将值从float转换为十进制:

if type(stamp) == float:
        stamp = Decimal(format(stamp, '.15g'))

但是当我这样做时,我会失去一些精确度。我怎么能得到微缩小数?

1 个答案:

答案 0 :(得分:1)

您可以直接将float传递给Decimal构造函数:

d = Decimal(stamp)

CPython float使用C double,它具有足够的精度来表示通常时间戳范围内的微秒。

time.time()datetime.utcnow()可能会产生稍微不同的结果。后者四舍五入到微秒:

from datetime import datetime 
from decimal import Decimal

td = datetime.utcnow() - datetime(1970, 1, 1)
timestamp_microseconds = (td.days*86400 + td.seconds)*10**6 + td.microseconds
d = Decimal(timestamp_microseconds).scaleb(-6)

结果应该等于Decimal(time.time()),精度为微秒。