潜望镜时间戳

时间:2015-11-18 01:03:20

标签: android c++

当我执行以下请求时:在Periscope应用程序中POST https://signer.periscope.tv/sign HTTP / 1.1,它会生成3个时间戳。

以下是这些时间戳的3个示例,但我无法弄清楚它们的含义。

我知道3号码始终是Linux时间戳,但是1& 2它们与Linux时间戳有什么关系?

什么是“tpForBroadcasterFrame”以及如何与时间戳相关?

  • 1 ntpForBroadcasterFrame:15704244410975025152
  • 2 ntpForLiveFrame:15704244125303865344
  • 3时间戳:1447440545

  • 1 ntpForBroadcasterFrame:15704244443861590016
  • 2 ntpForLiveFrame:15704244125303865344
  • 3时间戳:1447440553

  • 1 ntpForBroadcasterFrame:15704244474141110272
  • 2 ntpForLiveFrame:15704244125303865344
  • 3时间戳:1447440560

1 个答案:

答案 0 :(得分:2)

前两个看起来是Network Time Protocol时间戳。第三个更准确地称为POSIX时间戳。

NTP将数据存储在无符号的64位整数中,表示自1900年以来的32位秒和32位小数秒,所以...

屏蔽15704244410975025152的前32位,自1900年以来提供3656429334秒。其他32位没有映射到POSIX时间戳,因为其最小分辨率为1秒。

从3656429334减去2208988800,the number of seconds between 1900 and 1970给出自Posix时代以来的1447440534秒,或者2015年11月13日星期五18:48:54 GMT

快速入侵代码:

#include <iostream>

constexpr uint64_t epochdelta = 2208988800L; // number of seconds between 1900 and 1970

int main()
{
    uint64_t num= 15704244410975025152ULL;

    uint32_t seconds  = (uint32_t)(num >> 32);


    std::cout << seconds << " seconds since 1900"  << std::endl;
    std::cout << seconds - epochdelta << " seconds since 1970" << std::endl;
    return 0;
}