我正在尝试从 iPhone 数据库转换时间戳,该数据库以十六进制形式存储为 Python 脚本的一部分。
我在网上搜索过,但找不到它是如何完成的。
时间戳示例:
41 C4 C2 FA 5E 8C E8 64
等于 29/01/2023 00:26:37 (UTC)。
我知道这一点,因为一些工具(例如 deCode)能够对其进行转换,但现在显示了“正在解决”。
谢谢
如上所述,我无法找到将十六进制转换为可读时间的实际方法。多种工具都可以对其进行转换,只是不作为脚本的一部分
您的字符串是双精度浮点数的大端表示形式,表示自 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
一种方法可以是:
而不是:
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