需要一个以微秒为十进制的时间戳
Need a timestamp with microseconds as Decimal
目前我正在使用 time.time() 创建包含微时间的时间戳。但主要是我将这些与小数和 time.time() returns 浮点数进行比较。
目前我在需要时将值从浮点数转换为十进制数:
if type(stamp) == float:
stamp = Decimal(format(stamp, '.15g'))
当然,这样做时我会失去一些精确度。我还能如何获得微时间小数?
您可以将 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())
,精度为微秒。
目前我正在使用 time.time() 创建包含微时间的时间戳。但主要是我将这些与小数和 time.time() returns 浮点数进行比较。
目前我在需要时将值从浮点数转换为十进制数:
if type(stamp) == float:
stamp = Decimal(format(stamp, '.15g'))
当然,这样做时我会失去一些精确度。我还能如何获得微时间小数?
您可以将 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())
,精度为微秒。