1

APIを介してboost::posix_time::ptimeを提供するデバイスがあります。他のデータと同期するには、NTP 秒と NTP fract_seconds で区別された 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;
  }

しかし、正しい結果が得られませんか?どんな助けでも感謝します。

4

1 に答える 1

0

注: boost::ptime mayNTP に必要な粒度がありません。ただし、必要な数量を取得するためにできること (秒と端数は次のとおりです)

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

これで、必要な NTP タイムスタンプを作成できる 2 つの 32 ビット値が得られます。

于 2011-08-17T09:33:37.343 に答える