gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 14:21:45 25 4
gpt4 key购买 nike

我有一个设备可以通过其 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 可能 没有 NTP 所需的粒度。但是你可以做些什么来获得所需的数量(秒和小数如下)

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

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

关于c++ - 将 boost::posix_time::ptime 转换为 NTP 时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7090513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com