Применение формулы на отметке времени в миллисекундах в C ++ всегда дает мне 0?

У меня есть метод ниже, который примет oldTimestamp в качестве входного параметра, который uint64_t… Теперь мне нужно применить формулу на выше oldTimestamp и всякий раз, когда я применяю эту формулу, я всегда получаю 0 как start значение.

А также я пытаюсь получить current timestamp в миллисекундах в том же методе, который long int тип данных (не уверен, что это правильный тип данных), и всякий раз, когда я снова применяю ту же формулу к currentTimestampЯ всегда получаю end значение как 0 также…

Ниже мой метод —

void getRecord(uint64_t oldTimestamp) {

int start = (oldTimestamp / (60 * 60 * 1000 * 24))  % 14;

cout<<"START: " << start <<endl; // this always print out as 0..?

struct timeval tp;
gettimeofday(&tp, NULL);

long int currentTimestamp = tp.tv_sec * 1000 + tp.tv_usec / 1000; //get current timestamp in milliseconds

int end = (currentTimestamp / (60 * 60 * 1000 * 24))  % 14;

cout<<"END: " << end <<endl; // this always print out as 0 as well..?

}

Что-то не так я здесь делаю?

Возможно, я использую неправильный тип данных для currentTimestamp и oldTimestamp и не должен использовать int за start а также end?

Обновить:-

Как то так будет хорошо?

void getRecord(uint64_t oldTimestamp) {

uint64_t start = (oldTimestamp / (60 * 60 * 1000 * 24))  % 14;

cout<<"START: " << start <<endl;

struct timeval tp;
gettimeofday(&tp, NULL);

uint64_t currentTimestamp = tp.tv_sec * 1000 + tp.tv_usec / 1000; //get current timestamp in milliseconds

uint64_t end = (currentTimestamp / (60 * 60 * 1000 * 24))  % 14;

cout<<"END: " << end <<endl;

}

0

Решение

void getRecord(uint64_t oldTimestamp) { // you are using uint64_t here

int start = (oldTimestamp / (60 * 60 * 1000 * 24))  % 14; // you are using int here

Вероятно, вы столкнулись с проблемой переполнения, которая вызывает неопределенное поведение.

Вам нужно использовать uint64_t как твой start тип. То же самое касается вашего currentTimestamp а также end переменные.

1

Другие решения

Проблема в том, что вы используете int для начала и конца.

0

По вопросам рекламы [email protected]