将boost::posix_time::ptime转换为NTP时间戳



我有一个设备,通过它的API给我boost::posix_time::ptime。为了与其他数据同步,我需要时间作为NTP时间戳,以NTP秒和NTP fract_seconds区分。

我试过这样做:

#include "boost/date_time/posix_time/posix_time.hpp"
#include <iostream>
using namespace std;
using boost::posix_time::ptime;
using boost::posix_time::time_duration;
using boost::gregorian::date;
int main() 
  {
    ptime t = boost::posix_time::microsec_clock::local_time();
    ptime myEpoch(date(1900,boost::gregorian::Jan,1));
    time_duration myTimeFromEpoch = t - myEpoch;
    boost::uint64_t myTimeAsInt = myTimeFromEpoch.ticks();
    cout << myTimeAsInt << endl;
    boost::uint32_t seconds = (boost::uint32_t)((myTimeAsInt >> 32) & 0xFFFFFFFF);
    boost::uint32_t fraction = (boost::uint32_t)(myTimeAsInt & 0xFFFFFFFF);
    cout << seconds << endl;
    cout << fraction << endl;
    return 0;
  }

但是它没有给我正确的结果?

注意:boost::ptime may不具备NTP所需的粒度。然而,您可以做些什么来获得所需的数量(秒和小数如下)

long seconds = myTimeFromEpoch.total_seconds();
long fractional = myTimeFromEpoch.fractional_seconds()

现在您应该有两个32位的值,您可以从中构造必要的NTP时间戳。

最新更新