我尝试使用带有stm32f4
卡的时间函数返回1970年的秒数。
我已配置这些数据类型
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 :(得分:1)
使用
> db.system.version.save(schema)
显示printf("time %d\n", time(&rawtime));
不合适。 rawtime
不一定是time_t
。
以下是我从http://en.cppreference.com/w/cpp/chrono/c/time复制的一些代码,用于显示int
返回的值:
time
答案 1 :(得分:0)
根据我的阅读,似乎time()
可能会返回负值:What is ultimately a time_t typedef to?
Unix和POSIX兼容系统将time_t类型实现为 签 整数(通常为32或64位宽),表示自Unix纪元开始以来的秒数:午夜UTC 1970年1月1日(不计算闰秒)。有些系统正确 处理负时间值,而其他人则不处理。系统使用 32位time_t类型容易受到2038年问题的影响。
time.h
库中的函数可以处理这些负值并将它们转换为实际日期。事实上,这可以在您的计算机上得到证明,因为ctime()
工作正常。
在您的情况下,如果您绝对需要秒数,则需要在打印之前将time()
的返回值转换/转换为长整数。
printf("Time : %lu", (long)time(&rawtime));