У меня есть метод ниже, который примет 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;
}
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
переменные.
Проблема в том, что вы используете int для начала и конца.