使用从二进制数据字符串中提取日期和时间

2024-05-16 01:39:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个第三方应用程序,它将时间序列数据存储为压缩二进制文件。我正在尝试创建一个工具来转换存储在这个文件中的数据。在

下面显示的是此数据的快照。在

41 16 00 00 01 00 D7 11 00 00 01 00 E8 55 A6 20 08 1E D0 08 00 00 00 60 59 D5 
86 40 03 E8 F5 2C 22 08 1E D0 08 00 00 00 00 C0 0B 87 40 01 E8 95 B3 23 08 1E 
D0 08 00 00 00 40 1E 00 87 40 01 E8 35 3A 25 08 1E D0 08 00 00 00 60 13 F8 86
40 01 E8 D5 C0 26 08 1E D0 08 00 00 00 40 65 09 87 40 01 E8 75 47 28 08 1E D0 
08 00 00 00 20 8A F6 86 40 01 E8 15 CE 29 08

我知道这个数据块对应于以下值。在

^{pr2}$

我可以提取这些值:它们属于double类型。例如,8个字节00 00 00 60 59 D5 86 40对应于730.6686401。在

但是我被如何提取日期时间格式所困扰。我知道它就埋在这根绳子的某个地方。我怎么知道时间是什么格式的?在

我一直在使用Python的struct模块进行类型转换。在

有人有什么想法吗?在


Tags: 文件工具数据应用程序格式时间二进制序列
1条回答
网友
1楼 · 发布于 2024-05-16 01:39:56

如果您取其中一个double之前的8个字节,并将其视为一个整数(低位,如double),则得到以下数字:

635040567715583464
635040567741183464
635040567766783464

如果你把这些数字除以10**7,那么你得到的日期是秒数(和分数秒)。至少它对应于分、秒和秒的分数。在几个小时里,我得到了两个错误(时区?)。对于完整日期,日期735000(*)对应于2013年5月13日,如下所示。是从第一年开始的天数:

^{pr2}$

(*)这是这些数字中的任何一个除以10**7*60*60*24

或者一步到位:

>>> x = 635040567715583464 / 10.**7 / 86400
>>> datetime.datetime(1,1,1) + datetime.timedelta(x)
datetime.datetime(2013, 5, 13, 15, 46, 11, 558353)

相关问题 更多 >