Преобразование boost::posix_time::ptime в временную метку NTP

У меня есть устройство, которое дает мне boost::posix_time::ptime через его API. Для синхронизации с другими данными мне нужно время в виде метки времени 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;
  }

Но это не дает мне правильные результаты? Любая помощь приветствуется.


person metacircle    schedule 17.08.2011    source источник
comment
@person голосует за закрытие, не уверен, что это дубликат того, что time_t отличается от NTP.   -  person Nim    schedule 17.08.2011


Ответы (1)


ПРИМЕЧАНИЕ. boost::ptime may не имеет необходимой детализации для NTP. Однако то, что вы можете сделать, чтобы получить необходимое количество (секунды и дроби, выглядит следующим образом)

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

Теперь у вас должно быть два 32-битных значения, из которых вы можете построить необходимую метку времени NTP.

person Nim    schedule 17.08.2011