我有来自 dpkt 库的时间戳等值(当数据包到达时):
for ts, buffer in dpkt.pcap.Reader(file):
#whatever...
Reader 以十进制形式给出 ts,例如:
print(repr(ts))
Decimal('1536310893.687185000')
我正在尝试将其转换为日期时间
,但我没有得到微秒(实际上是纳秒,但目前只有微秒很重要)
ts_dt = datetime.datetime.utcfromtimestamp(ts)
ts_dt
datetime.datetime(2018, 9, 7, 9, 1, 33)
出于某种原因,utcfromtimestamp
不考虑 Decimal 值的小数部分。
这是一个错误吗?它在 Python 2.7 中工作
我可以将Decimal
转换为float
,它有点工作,但我讨厌这种方法 - float 的精度有限。有可能,在某些版本中,它会被微小的变化所破坏,或者我将得到不精确的值,这可能是一场灾难,并且排除故障将是巨大的痛苦......我更喜欢尽可能拥有精确的值和准确的计算(尤其是在转换时间戳这样的琐事中)...
那么在将Decimal
时间戳转换为datetime
时如何保留微秒?
最佳答案
不知道为什么这在Python3.6+中不起作用,但在没有浮点的情况下进行转换的一种方法是使用datetime.replace()
来设置微秒,例如:
代码:
ts_dt = dt.datetime.utcfromtimestamp(ts).replace(microsecond=(ts - int(ts)) * 1000000)
测试代码:
import datetime as dt
ts_dt = dt.datetime.utcfromtimestamp(ts)
print(ts_dt)
ts_dt = dt.datetime.utcfromtimestamp(ts).replace(microsecond=(ts - int(ts)) * 1000000)
print(ts_dt)
结果:
2018-09-07 09:01:33
2018-09-07 09:01:33.687185
关于python - 将十进制时间戳转换为日期时间时如何保留微秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52468909/