【发布时间】:2016-07-06 21:38:15
【问题描述】:
我正在尝试使用 python 将 48 位(8 个八位字节)转换为时间戳,用于一个小安全项目。我正在处理来自 DNP3 协议的一些网络数据包,并且我正在尝试解码每个 DNP3 类对象的时间戳值。
根据 DNP3 标准,“DNP3 时间(以 UINT48 的形式):表示为自 1970 年 1 月 1 日开始的毫秒数的绝对时间值”。
我有以下八位字节需要转换为日期时间:
# List of DNP3 timestamps
DNP3_ts = []
# Feb 20, 2016 00:27:07.628000000 UTC
DNP3_ts.append('\xec\x58\xed\xf9\x52\x01')
# Feb 20, 2016 00:34:08.107000000 UTC
DNP3_ts.append('\x6b\xc3\xf3\xf9\x52\x01')
# Feb 20, 2016 00:42:40.460000000 UTC
DNP3_ts.append('\xcc\x94\xfb\xf9\x52\x01')
# Feb 20, 2016 00:56:47.642000000 UTC
DNP3_ts.append('\x1a\x82\x08\xfa\x52\x01')
# Feb 20, 2016 00:56:48.295000000 UTC
DNP3_ts.append('\xa7\x84\x08\xfa\x52\x01')
# Feb 20, 2016 00:58:21.036000000 UTC
DNP3_ts.append('\xec\xee\x09\xfa\x52\x01')
# Feb 20, 2016 01:17:09.147000000 UTC
DNP3_ts.append('\x9b\x25\x1b\xfa\x52\x01')
# Feb 20, 2016 01:49:05.895000000 UTC
DNP3_ts.append('\xe7\x64\x38\xfa\x52\x01')
# Feb 20, 2016 01:58:30.648000000 UTC
DNP3_ts.append('\xf8\x02\x41\xfa\x52\x01')
for ts in DNP3_ts:
print [ts]
所以我需要弄清楚以下步骤:
# 1. Converting the octets into a 48bit Integer (which can't be done in python)
# 2. Using datetime to calculate time from 01/01/1970
# 3. Convert current time to 48bits (6 octets)
如果有人可以帮助我完成这些步骤,将不胜感激!
【问题讨论】:
标签: python datetime timestamp dnp3