2011-08-17 6 views
1

私はboost :: posix_time :: ptimeをAPIに与えてくれるデバイスを持っています。他のデータとsychronizeするには、NTPタイムスタンプとして時間が必要で、NTP秒とNTPフラクタル秒で区別されます。boost :: posix_time :: ptimeから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; 
    } 

をしかし、それは私に正しい結果が得られていないのですか?どんな助けもありがたい。

+0

@personは投票を締め切りましたが、それは 'time_t'の複製ではありません。NTPとは異なります。 – Nim

答えて

0

注:boost::ptime mayは、NTPに必要な粒度を持っていません。しかし、あなたが必要な量を得るために何ができるか(次のように秒と小数がある)

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

今、あなたはあなたが必要なNTPタイムスタンプを構築することができ、そこから2つの32ビット値を持つ必要があります。

関連する問題