谁能告诉我如何将timegettime时间与epochtime联系起来

时间:2017-06-08 23:26:53

标签: windows time

我正在开展一个项目,我们从各种传感器收集数据并记录各种日志。

大多数传感器都是使用TimeGetTime以毫秒为单位记录的,这是从PC的启动时间开始测量的时间。但我有一个传感器,其记录时间以毫秒为单位。

如果我必须将所有传感器数据同步到一起,如何将纪元时间与TimeGetTime联系起来?

1 个答案:

答案 0 :(得分:1)

转换纪元时间的一种方法(我假设它是自[Wikipedia]: Unix time([MAN]: time) * 1000以来经过的毫秒数( ms ) )自 Win 启动后经过 ms ,你必须:

  1. 使用(正如您已经提到的)[MSDN]: timeGetTime function获取 Win 启动后的 ms 的数量(作为替代方法,您可以使用[MSDN]: GetTickCount64 function ;我没有研究差异 - 在精确度方面 - 在2)之间。
  2. 使用[MSDN]: GetSystemTimeAsFileTime function
  3. 获取当前的 Win 时间
  4. 由于上一步检索的时间是(根据[MSDN]: FILETIME structure):

      

    一个64位值,表示自1601年1月1日(UTC)以来100纳秒间隔的数量。

    您需要将其转换为 Ux 时代样式时间。转换算法非常简单,网上有很多例子,这里有一个例子:[SO]: Convert Windows Filetime to second in Unix/Linux(因为结果是几秒钟,你需要将它乘以1000)。这表示自 Ux 纪元时间以来经过的 ms 的数量,直到现在

  5. 步骤3 中减去步骤1 ms ,因为 Win 启动后)的值( ms ,因为 Ux 纪元时间),您将获得 Ux 纪元之间 ms 的数量时间和时间 Win 开始。这是您必须从 funky 传感器获取的每个时间戳中减去的偏移量,以便与从其他所有时间戳获得的时间戳同步传感器。
相关问题