【发布时间】:2015-06-15 15:14:15
【问题描述】:
我正在尝试解析 .cds delphi 数据库文件。简单的 int 值和字符串很容易解析。但我唯一无法理解的是 DateTime 格式。 我发现 6 个字节会影响 DateTime 值
我正在使用 python 和以下代码:
data = '\x00\x00' + '\xBC\xCE\x6F\xEC\xE7\xCC'
data_long = struct.unpack('Q', data)[0]
但是 struct.unpack 没有 6 字节类型的值,所以我添加了 \x00 \x00 来制作 8 字节长的值('Q' 选项)
这是一个小示例 .cds 文件,其中一行 https://yadi.sk/d/PkZKy50YgCmqE
DateTimeIssl 值 = "16.04.2015 9:25:47"
我找到了 6 个十六进制值,但无法正确解压。 谁能告诉我如何阅读它,或者给我一个关于 .cds 文件结构的文档的链接?
更新: 好的!感谢 Deltics 指导我如何阅读 TDateTime。我在互联网上找到了一些测试值,并编写了将其转换为 Python 日期时间对象的解码函数。
data = '\x2E\xD8\x82\x2D\xCE\x47\xE3\x40'
data_double = struct.unpack('d', data)[0]
double_split = str(data_double).split('.')
SECONDS_IN_DAY = 60*60*24
time_from_starting_date = timedelta(days=int(double_split[0]), seconds=int(SECONDS_IN_DAY * (float(double_split[1]) * pow(0.1, len(double_split[1])))))
starting_date = datetime(1899, 12, 30)
result_date = starting_date + time_from_starting_date
print time_from_starting_date
print result_date
对于 2E D8 82 2D CE 47 E3 40,它将是 08.02.2008 10:38:00。 工作正常。
但我仍然无法在上面链接的文件中找到字段 DateTimeIssl 的有效 8 字节。也许有不同的日期时间格式?
【问题讨论】:
标签: delphi parsing datetime tclientdataset