【问题标题】:Unknown timestamp reference date未知时间戳参考日期
【发布时间】:2013-10-11 16:20:48
【问题描述】:

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

系统在 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)

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

有人能解释一下这个相当奇怪的问题吗?

提前致谢!

【问题讨论】:

  • 在您的示例中,您没有转换为 Unix 时间戳,而是转换为 DateTime。时间戳仍然是整数。此外,DateTimes 取决于时区、DST 等。发布一个更一致的示例将帮助您和其他人处理真正的问题。
  • 我知道我没有转换为 Unix 时间戳,因为毕竟这是问题所在;我不知道如何将它们转换为 Unix 时间戳,因为我不知道这些时间戳的参考日期。 ;-)
  • 仅一个 DateTime 不足以计算时间戳。例如,说 2111441659 转换为:2013-10-01 11:59 **UTC**2111441659 转换为:2013-10-01 11:59 **EST** 不同。它们将对应于不同的 Unix 时间戳。我的观点:信息不足!
  • 示例中的日期均为 GMT+2 (UTC)
  • 我实际上对此有点困惑,因为我查看了 UTC 世界地图,而我的国家(荷兰)似乎在 UTC 0 中,我认为您必须参加夏季/winter time 考虑在内,所以那将是 UTC+1?现在我更困惑了,哈哈。 (以前从未与 UTC 合作过)。

标签: windows date timestamp epoch


【解决方案1】:

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

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

附:你确定这台机器上的年份设置为 2013 而不是 4013? :) 这将适合 .NET 时代,即第 1 年 1 月 1 日

【讨论】:

  • 时间戳是由另一个软件生成的。机器上的日期是正确的 ;-) 我认为你对分钟的看法是对的,我会做一些数学运算看看它是否有效 :-)
【解决方案2】:

为了区分你的时间戳和Unix时间戳,我们称你的计数器

所以我们有四个计数器值及其对应的 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 秒。

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

【讨论】:

    【解决方案3】:

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

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

    在伪代码中:

    year = TimeStamp >> 20;
    
    month = (TimeStamp >> 16) & 15;
    
    day = (TimeStamp >> 11) & 31;
    
    hour = (TimeStamp >> 6) & 31;
    
    minute = TimeStamp & 63;
    

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

    【讨论】:

      猜你喜欢
      • 2020-11-19
      • 2014-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多