Pergunta

Preciso converter dados do Java Long Datatype (64 bits) em um tipo de dados do App C ++ Legacy C ++ não assinado (32 bits).

Não se preocupe com a perda de dados, pois os dados são o Timestamp Linux, o que levaria os Eons para atingir o limite int não assinado.

Alguma idéia de que transformação aplicar a esses números?

Desde já, obrigado!

PS - Exemplo do tipo dados:

Java - 1266336527340

C ++ - 1266336583

Ambos produzem a mesma data e o mesmo horário (+/- por minuto).

Foi útil?

Solução

Java's Date.getTime retorna o número de milissegundos da época, enquanto o código C ++ espera o número de segundos Da época, então você precisa dividir por 1000 e depois truncar:

int timestampAsInt = (int)(timestampAsLong / 1000);

Java tem apenas um número inteiro assinado não assinado, mas isso deve funcionar.

Outras dicas

long javaTime = someDate.getTime();
int cTime = (int)((javaTime + 500) / 1000);

Eu prefiro arredondar o truncamento, mas você terá que decidir qual é o certo para suas regras de negócios.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top