我有以下十六进制部分,并且我强烈怀疑它们后面是事件的发生日期:

2013.05.23  20:35:00    08014273ed2071a6800017
2013.05.23  21:45:00    08014273ed246cf0000017
2013.05.24  17:10:00    08014273ed675173000017
2013.05.25  01:10:00    08014273ed82900f000017
2013.05.25  02:15:00    08014273ed8667b3800017
2013.05.25  17:15:00    08014273edb9c78e800017
2013.05.25  19:55:00    08014273edc2ee93000017
2013.05.25  20:30:00    08014273edc52a5a000017
2013.05.29  06:25:00    08014273eede5079000017
2013.05.29  06:35:00    08014273eedeac45000017
2013.05.29  06:40:00    08014273eedf09c6800017
2013.05.30  21:40:00    08014273ef64b021800017


第一和第二个是我对事件的观察(我没有确切的时间在几分钟和几秒钟内),也可能在我所在的时区。第三列是十六进制值,我怀疑这是本次演示。
目前,我假设0817只是分隔符。

我一直在寻找时间戳记表示形式和日期时间,但目前没有成功。
你猜怎么回事?

PS进行了一些完整的更新不同的日期。我也会尝试找到更早的日期。感谢您的帮助

2013.01.01  00:50:00    08014273bf2ba0ed000017
2012.12.15  03:25:00    08014273b9bbb8cd000017


评论

您还可以提供一些完全不相关的日期吗?再说一个2012年(可能是1月还是6月?)。

嗯不应该因为“太本地化”而关闭?

可能有,但这根本没有帮助。这不仅仅是我在这里的答案,引导人们使用它的方式可能对其他人也有帮助。

#1 楼

第三列中的数字确实会随着时间增加,这是一个好的开始。让我们检查连续行上数字之间的差异,以查看级数是否为线性:

#!/usr/bin/env python
import re, sys, time
lines = sys.stdin.readlines()
def parse(l): return time.mktime(map(int,l[0:6]) + [0]*3), int(l[6], 16)
stamps = [parse(re.split('[\n.: ]+',line)) for line in lines]

print lines[0][:20]
for i in xrange(1,len(stamps)):
    (t1,x1) = stamps[i]
    (t0,x0) = stamps[i-1]
    print "%s  %8d %18d %12d" % (lines[i][:20], t1-t0, x1-x0, (x1-x0)/(t1-t0))


输出:
进展实际上基本上是线性的,最高的比率对应于不确定性相对较大的最短间隔。日期,月份或年份的变化没有明显的变化,因此该数字可能直接是时间单位,而不是列中的年-月-日-时-分-秒。

该速率接近纳秒,但实际上接近每秒10.48亿滴答。

很明显所有的差都是1000的倍数。让我们用十进制打印十六进制数:

2012.12.15  03:25:00
2013.01.01  00:50:00   1459500   1530417643520000   1048590368
2013.05.23  20:35:00  12339900  12935551254528000   1048270346
2013.05.23  21:45:00      4200      4377804800000   1042334476
2013.05.24  17:10:00     69900     73549217792000   1052206263
2013.05.25  01:10:00     28800     29955719168000   1040129137
2013.05.25  02:15:00      3900      4224712704000   1083259667
2013.05.25  17:15:00     54000     56486789120000   1046051650
2013.05.25  19:55:00      9600     10063183872000   1048248320
2013.05.25  20:30:00      2100      2455764992000   1169411900
2013.05.29  06:25:00    294900    309126496256000   1048241764
2013.05.29  06:35:00       600       394264576000    657107626
2013.05.29  06:40:00       300       401604608000   1338682026
2013.05.30  21:40:00    140400    146949537792000   1046649129


639并不引人注目,在前面的数字中我也看不到任何模式。不过,似乎数据在某些时候是由连接十进制数字构建的。

还记得每秒接近10.48亿的间隔吗?由于最后3个十进制数字可能不是时间的一部分,因此我们必须将此数字除以1000。结果非常接近每秒2 ^ 20份。因此,数据在某些时候看起来已经以十进制组合,而在其他时候已经以十六进制组合了!让我们将十六进制数除以1000,但以十六进制打印:

9677354747411355314159639
9677354748941772957679639
9677354761877324212207639
9677354761881702017007639
9677354761955251234799639
9677354761985206953967639
9677354761989431666671639
9677354762045918455791639
9677354762055981639663639
9677354762058437404655639
9677354762367563900911639
9677354762367958165487639
9677354762368359770095639
9677354762515309307887639


输出:

for (l,s) in zip(lines, stamps): t = (s[1] - 639) / 1000; print l[:20], s[0], hex(t)


那些最后5个十六进制数字是常数。这是左侧的下一部分,大致相当于某个时期以来的秒数。剥离左侧的一些数字应产生纪元,困难是要知道剥离多少个十六进制数字和剥离多少个十进制数字。我找不到漂亮的时代。

#2 楼

跟进Gilles的答案,前7个十六进制数字(0801427)和后5个(00017)不属于时间戳。剩余的时间是从2004年11月4日开始的毫秒数。如果将其转换为日期,则会得到5月或1个小时的时间。那可能是夏令时。

我不知道为什么会有这样的时代。可能是生成时间戳的任何版本的发布日期。