Отрицательное значение, возвращаемое временем

Я пытаюсь вернуть число секунд с 1970 года с функцией времени с stm32f4 карта.

У меня настроен тип данных

RTC_HandleTypeDef RtcHandle;
RTC_DateTypeDef dateStruct;
RTC_TimeTypeDef timeStruct;

Я звоню

HAL_RTC_GetTime
HAL_RTC_GetDate

и я называю эту функцию

long SystemClock::getUnixTimestamp()
struct tm timeinfo;

//Setup a tm structure based on the RTC
timeinfo.tm_wday = dateStruct.WeekDay;
timeinfo.tm_mon = dateStruct.Month - 1;
timeinfo.tm_mday = dateStruct.Date;
timeinfo.tm_year = dateStruct.Year + 100;
timeinfo.tm_hour = timeStruct.Hours;
timeinfo.tm_min = timeStruct.Minutes;
timeinfo.tm_sec = timeStruct.Seconds;

time_t rawtime = mktime(&timeinfo);

trace_printf("Current date and time are: %s\n", ctime(&rawtime));
long x = time(&rawtime);
trace_printf("time %lu\n", x);
return x;
}

я вижу

Current date and time are: Wed Apr 29 22:46:00 2015
time 1430347560

5 second later, i do another call to HAL_RTC_GetTime, HAL_RTC_GetDate, getUnixTimestamp and i get

Current date and time are: Wed Apr 29 22:46:05 2015
time 1430347560

почему время не изменено?

0

Решение

С помощью

printf("time %d\n", time(&rawtime));

для отображения rawtime не подходит time_t не обязательно int,

Вот код, который я скопировал с http://en.cppreference.com/w/cpp/chrono/c/time отображать значение, возвращаемое time:

#include <ctime>
#include <iostream>

int main()
{
std::time_t result = std::time(nullptr);
std::cout << std::asctime(std::localtime(&result))
<< result << " seconds since the Epoch\n";
}
1

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

Из того, что я читаю, кажется, что time() может вернуть отрицательное значение: К чему в конечном счете относится type_t?

Unix и POSIX-совместимые системы реализуют тип time_t как
подписанный
целое число (обычно 32 или 64 бита), которое представляет количество секунд с начала эпохи Unix: полночь UTC
1 января 1970 г. (не считая високосных секунд). Некоторые системы правильно
обрабатывать отрицательные значения времени, а другие нет. Системы, использующие
32-битный тип time_t подвержен проблеме 2038 года.

Функции в time.h Библиотека сможет обрабатывать эти отрицательные значения и переводить их в фактические даты. На самом деле, это может быть доказано на вашем компьютере, так как ctime() работает отлично.

В вашей ситуации, если вам абсолютно необходимо количество секунд, вы захотите преобразовать / typecast возвращаемое значение time() в долго, прежде чем распечатать его.

printf("Time : %lu", (long)time(&rawtime));
0

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