未知的时间戳参考日期

时间:2013-10-04 15:29:27

标签: windows date timestamp epoch

我目前正在处理一个使用未知时间戳机制的系统。

系统在Windows机器上运行,所以我首先想到的是它使用某种Windows纪元作为其时间戳,但似乎没有。

我的目标是将这些时间戳转换为Unix时间戳。


一些例子:

以下时间戳:2111441659转换为:2013-10-01 11:59

  • 21114419982013-10-01 17:14
  • 21114438762013-10-02 14:36
  • 21114440892013-10-02 17:57

(所有日期均为GMT + 2)

我尝试使用上面的数据来计算参考日期,但不知何故,每个时间戳都会得到不同的结果。

有人可以对这个相当奇怪的问题有所了解吗?

提前致谢!

3 个答案:

答案 0 :(得分:0)

对我而言,数字似乎很小,只有几毫秒。我的第一个猜测是秒,但看着这个数字变化的速度,我认为分钟是一个更好的猜测。做一些数学计算2111441659/60/24/365 = 4017.20254756这表明时代可能是在-2000年的某个时间?

Here是计算中常见时代的列表,但是-2000年并不存在:)你如何获得这个时间戳?

P.S。你确定这台机器的年份设定为2013年而不是4013吗? :)这将适合1年1月1日的.NET纪元

答案 1 :(得分:0)

为了区分你的时间戳与 Unix 时间戳,让我们打电话给你 The Counter

因此我们有四个计数器值及其对应的DateTime值。首先要做的是计算计数器与实时单位的单位对应关系,假设第二个

为了做到这一点,我们需要(1)两个计数器值之间的差异d和(2)它们对应的DateTime之间的差异s,以秒为单位。

考虑前两个值d1=2111441998-2111441659=3392013-10-01 11:592013-10-01 17:14之间的差异(以秒为单位)为s1=18900。因此,计数器的单位对应u1=s1/d1=55.7522123894秒。

但如果我们对#2和#3对做同样的事情,我们会发现u2=40.9584664536秒。

同样,对#3和#4给我们u3=56.6197183114秒。

因此,我的结论是,计数器值与提供的相应DateTime之间没有对齐。这就是为什么每个样本得到不同结果的原因。

答案 2 :(得分:0)

最后,经过几个小时的时间戳与日期时间的比较,尝试发现它们之间的逻辑,我通过逆向工程生成时间戳的软件找到答案。

事实证明,整数时间戳实际上是日期时间的按位表示*。

在伪代码中:

year = TimeStamp >> 20;

month = (TimeStamp >> 16) & 15;

day = (TimeStamp >> 11) & 31;

hour = (TimeStamp >> 6) & 31;

minute = TimeStamp & 63;

* 我不确定这是否是正确的术语,如果没有,请纠正我。

相关问题