gpt4 book ai didi

python - 使用以下命令从二进制数据字符串中提取日期和时间

转载 作者:行者123 更新时间:2023-11-30 23:22:46 30 4
gpt4 key购买 nike

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

下面显示的是该数据的快照。

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

我知道该数据 block 对应以下值。

5/13/2013 17:46:11.558  730.6686401
5/13/2013 17:46:14.118 737.46875
5/13/2013 17:46:16.678 736.0147705

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

但是我对如何提取日期时间格式感到困惑。我知道它被埋在这根绳子的某个地方。我怎样才能知道时间的格式是什么?

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

有人有什么想法吗?

最佳答案

如果您取紧邻 double 之一之前的 8 个字节,并将其视为整数(低端字节序,如 double),那么您将得到以下数字:

635040567715583464
635040567741183464
635040567766783464

如果将这些数字除以 10**7,则会得到以秒数(和小数秒)表示的日期。至少它对应于分钟、秒和秒的分数。在几个小时内,我收到了两个错误(时区?)。对于完整日期,日期编号 735000(*) 对应于 5/13/2013,如下所示。这是从第一年算起的天数:

>>> datetime.date(1,1,1) + datetime.timedelta(735000)
datetime.date(2013, 5, 13)

(*) 这是这些数字除以 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)

关于python - 使用以下命令从二进制数据字符串中提取日期和时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24335359/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com