Criando um objeto boost :: posix_time :: ptime a partir de uma contagem de segundos inteiro de 64 bits

Eu tenho um sistema Linux de 32 bits em que eu tenho que gravar dados que são timestamped com um segundo deslocamento de UINT32 de uma época de 1901-01-01 00:00:00.

Calculando o timestamp é ok para mim, como eu posso usar o de 64 bitsticks() contador eticks_per_second() funções para gerar os segundos desde a época da seguinte forma (eu só preciso de resolução de segundo nível)

const ptime ptime_origin(time_from_string("1901-01-01 00:00:00"));
time_duration my_utc = microsec_clock::universal_time() - ptime_origin;
boost::int64_t tick_per_sec = my_utc.ticks_per_second();
boost::int64_t tick_count = my_utc.ticks();
boost::int64_t sec_since_epoch = tick_count/tick_per_sec;

Isso funciona para mim, pois sei que, como um inteiro não assinado, a contagem de segundos não excederá o valor máximo UINT32 (bem, não por muitos anos).

O problema que tenho é que meu aplicativo pode receber uma mensagem modbus contendo um valor UINT32 para o qual eu tenho que ajustar o hardware e o clock do sistema com umioctl ligar usandoRTC_SET_TIME. Este UINT32 é novamente o offset em segundos desde a minha época 1901-01-01 00:00:00.

Meu problema agora é que eu não tenho comocrio a ptime objeto usando números inteiros de 64 bits - oticks parte detime_duration objetos é privado e estou restrito ao usolong que no meu sistema de 32 bits é apenas um inteiro assinado de 4 bytes não grande o suficiente para armazenar o deslocamento de segundos da minha época.

Eu não tenho controle sobre o valor da época e, por isso, estou realmente perplexo sobre como posso criar meus requisitosboost::posix_time::ptime objeto dos dados que tenho. Eu provavelmente posso obter uma solução suja calculando contagens secundárias duras para intervalos de tempo específicos e usando uma época adicional para fazer uma ponte para permitir isso, mas eu queria saber se há algo noboost código que me permitirá resolver o problema inteiramente usando a biblioteca de datetime boost. Eu li toda a documentação que posso encontrar, mas não consigo ver nenhuma maneira óbvia de fazer isso.

EDIT: eu encontrei esta questão relacionadaConverter int64_t em time_duration mas a resposta aceita não funciona para minha época

questionAnswers(2)

yourAnswerToTheQuestion