我正在编写一个低级工具来扫描损坏的 Jet4 MDB 文件并恢复数据。我正在扫描页面、解析行并解码列。
如果我有日期时间字段的原始 8 字节值,如何将其转换为日期的字符串表示形式,例如“MM-DD-YY HH:MM:SS”?
如果我有单字段大小和 3 位小数的数字字段的原始 4 字节值,如何将该值转换为浮点/双精度?
是否有任何文档描述如何对所有访问字段进行编码并将其存储在磁盘上?
谢谢。
如果我有日期时间字段的原始 8 字节值,如何将其转换为日期的字符串表示形式,例如“MM-DD-YY HH:MM:SS”?
Access 将日期/时间值存储为 64 位(8 字节)Double
小端格式的值。整数部分表示访问“纪元”之前或之后的天数(1899-12-30 00:00:00
)和小数部分的绝对值代表时间部分为了那一天(例如,0.5 = 中午)。例如,在 Python 中我们会将字节转换为datetime
像这样的值:
from datetime import datetime, timedelta
import struct
# bytes as retrieved from .accdb or .mdb file
d_as_bytes = b'\x35\x07\x2F\x2C\x93\x63\xDD\xC0'
d_as_double = struct.unpack('<d', d_as_bytes)[0] # -30094.29957175926
d_integer_part = int(d_as_double) # -30094
d_fractional_part = abs(d_as_double - d_integer_part) # 0.29957175926
access_epoch = datetime(1899, 12, 30)
d = access_epoch + timedelta(days=d_integer_part) + timedelta(days=d_fractional_part)
print(d) # 1817-08-08 07:11:23
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)