python - 将十进制时间戳转换为日期时间时如何保留微秒?

标签 python python-3.x datetime

我有来自 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/

相关文章:

python - 使用正则表达式从字符串列表中提取特定信息

python - 将函数映射和参数存储在字典中

python-3.x - 在神经网络中使用一个热编码向量馈送标签

python - 组合来自 for 循环的响应并将它们导出到附加列中以 excel

javascript - 通过操作字符串将时间转换为 12 小时

javascript - 如何将 UTC 日期/时间转换为 EST 日期/时间

python - 在python中的二维列表中对邻居进行分组

python - 在 cdef 类中混合 cdef 和常规 python 属性

python - 使用 ngram 查找匹配的单词

php - 从日期字符串和时间字符串创建日期时间