Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将boost::posix_time::ptime转换为NTP时间戳_C++_Boost_Posix_Ntp - Fatal编程技术网

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

C++ 将boost::posix_time::ptime转换为NTP时间戳,c++,boost,posix,ntp,C++,Boost,Posix,Ntp,我有一个设备,它通过API为我提供boost::posix_time::ptime。要与其他数据同步,我需要时间作为NTP时间戳,以NTP秒和NTP分形秒区分 我试过这样的方法: #include "boost/date_time/posix_time/posix_time.hpp" #include <iostream> using namespace std; using boost::posix_time::ptime; using boost::posix_time::t

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

我试过这样的方法:

#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/date\u time/posix\u time/posix\u time.hpp”
#包括
使用名称空间std;
使用boost::posix_time::ptime;
使用boost::posix_time::time_duration;
使用boost::gregorian::date;
int main()
{
ptime t=boost::posix_time::microsec_clock::local_time();
ptime myEpoch(日期:1900年1月1日);
时间\持续时间mytimepromepoch=t-myEpoch;
boost::uint64_t myTimeAsInt=mytimepromepoch.ticks();
cout 32)和0xFFFFFFFF);
boost::uint32_t分数=(boost::uint32_t)(myTimeAsInt&0xFFFFFFFF);

cout注意:
boost::ptime可能没有NTP所需的粒度。但是,您可以做些什么来获得所需的数量(秒和分数如下)


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

@投票关闭的人,不确定它是否是时间的副本\u t
与NTP不同。
long seconds = myTimeFromEpoch.total_seconds();
long fractional = myTimeFromEpoch.fractional_seconds()