Mac 十六进制绝对时间

问题描述 投票:0回答:2

我正在尝试从 iPhone 数据库转换时间戳,该数据库以十六进制形式存储为 Python 脚本的一部分。

我在网上搜索过,但找不到它是如何完成的。

时间戳示例:

41 C4 C2 FA 5E 8C E8 64
等于 29/01/2023 00:26:37 (UTC)。 我知道这一点,因为一些工具(例如 deCode)能够对其进行转换,但现在显示了“正在解决”。

谢谢

如上所述,我无法找到将十六进制转换为可读时间的实际方法。多种工具都可以对其进行转换,只是不作为脚本的一部分

python timestamp hex
2个回答
2
投票

您的字符串是双精度浮点数的大端表示形式,表示自 2001 年 1 月 1 日以来的秒数。所以:

import time
import datetime
import struct

x = "41 C4 C2 FA 5E 8C E8 64"
z = bytes([int(x1,16) for x1 in x.split()])
p = struct.unpack('>d',z)[0]
print(p)

d = datetime.datetime(2001,1,1,0,0,0)
d = d.timestamp()+p
print(time.ctime(d))

输出:

696644797.100842
Sun Jan 29 00:26:37 2023

0
投票

一种方法可以是:

而不是:

z = bytes([int(x1,16) for x1 in x.split()])

我们可以做到:

z = bytes.fromhex(x)

根据@TimRoberts 解决方案:

import time
import datetime
import struct

x = "41 C4 C2 FA 5E 8C E8 64"
z = bytes.fromhex(x)
p = struct.unpack('>d',z)[0]
print(p)

d = datetime.datetime(2001,1,1,0,0,0)
d = d.timestamp()+p
print(time.ctime(d))


696644797.100842
Sun Jan 29 00:26:37 2023
© www.soinside.com 2019 - 2024. All rights reserved.