Database 解码旧数据库aka中的日期存储;“乐趣”;有数字
我正在编写一个实用程序来从遗留数据库(我们无法查询)中删除记录,而我在解释日期字段的存储方式时遇到了困难 所有日期将采用MM/DD/YYYY格式。十六进制将是由空格分隔的字节(2位) 我们知道:Database 解码旧数据库aka中的日期存储;“乐趣”;有数字,database,binary,reverse-engineering,Database,Binary,Reverse Engineering,我正在编写一个实用程序来从遗留数据库(我们无法查询)中删除记录,而我在解释日期字段的存储方式时遇到了困难 所有日期将采用MM/DD/YYYY格式。十六进制将是由空格分隔的字节(2位) 我们知道: 小时和分钟存储在不同的位置。增加一小时或分钟 日期时间不影响所讨论的4个字节 与月、日和年对应的字段为4字节: 1800年1月1日==70 8E 00 1800年1月15日==7E 8E 00 1800年1月16日==7F 8E 00 1800年1月31日==8E 8E 00 1800年1月2日==8
- 1800年1月1日==70 8E 00
- 1800年1月15日==7E 8E 00
- 1800年1月16日==7F 8E 00
- 1800年1月31日==8E 8E 00
- 1800年1月2日==8F 8E 00
- 1800年2月2日==90 8E 00
- 1800年2月15日==9D 8E 00
- 1800年2月16日==9E 8E 00
- 1800年2月28日==AA 8E 00
- 1800年2月29日==AB 8E 00#闰年的占位符
- 1800年1月3日==AC 8E 00
- 1800年1月12日==BF 8F 00
- 1800年2月12日==C0 8F 00
- 1800年3月12日==C1 8F 00
- 1800年12月15日==CD 8F 00
- 1800年12月16日==CE 8F 00
- 1800年12月30日==DC 8F 00
- 1800年12月31日==DD 8F 00
- 1801年1月1日=DE 8F 00
- 1801年12月31日==4A 91 00
有人有什么想法吗?是的,我熟悉大纪元 有4个字节。每一新的一天都会增加最左边的字节。一旦该字节到达“FF”,它将向其右侧的字节添加1。试试这个。。(用红宝石写)
def parse_date(hex)
actual_known_date = "1/1/2050".to_date
known_date = "21F30100"
total_days_since_known_date = 0
first_byte = hex[0,2]
second_byte = hex[2,2]
third_byte = hex[4,2]
fourth_byte = hex[6,2]
known_first_byte = known_date[0,2]
known_second_byte = known_date[2,2]
known_third_byte = known_date[4,2]
known_fourth_byte = known_date[6,2]
byte_4_days = known_fourth_byte.hex - fourth_byte.hex
byte_3_days = 0
byte_2_days = 0
byte_1_days = 0
if known_third_byte.hex >= third_byte.hex
byte_3_days = known_third_byte.hex - third_byte.hex
else
byte_4_days -= 1
ktb = known_third_byte.hex + 256
byte_3_days = ktb - third_byte.hex
end
if known_second_byte.hex >= second_byte.hex
byte_2_days = known_second_byte.hex - second_byte.hex
else
byte_3_days -= 1
ktb = known_second_byte.hex + 256
byte_2_days = ktb - second_byte.hex
end
if known_first_byte.hex >= first_byte.hex
byte_1_days = known_first_byte.hex - first_byte.hex
else
byte_2_days -= 1
ktb = known_first_byte.hex + 256
byte_1_days = ktb - first_byte.hex
end
total_days_since_known_date = (byte_1_days + (byte_2_days * 256) + (byte_3_days * (256 * 256)) + (byte_4_days * (256 * 256 * 256)))
number_of_leap_days = 0
date_we_want = actual_known_date - (total_days_since_known_date).days
return date_we_want
end