真心求助!!!mktime() 和 settimeofday使用方法!
以下是我自己写的一个设置系统时间的函数
但是运行结果mktime() 函数得到的秒数一直是-1,所以settimeofday函数返回值一直是-1,
请求高手看一下我的代码哪里出了问题!!
(注:datetime_t 是我自己定义的一个结构体,和tm的结构一样,通过这个参数传递进来我自己设定的时间)
void set_system_time(datetime_t ptime)
{
struct tm * stime;
struct timeval tv;
time_t timep,timeq;
int rec;
time(&timep);
stime = localtime(&timep);
stime->tm_sec = ptime.second;
stime->tm_min = ptime.minute;
stime->tm_hour = ptime.hour;
stime->tm_mday = ptime.day;
stime->tm_mon = ptime.month;
stime->tm_year = ptime.year;
timeq = mktime(stime);
tv.tv_sec = (long)timeq;
printf("the second: %ld",tv.tv_sec);
tv.tv_usec = 0;
rec = settimeofday(&tv,NULL);
if(rec <0 )
{
printf("settimeofday failed!\n");
}
else
{
printf("Set system time ok!\n");
}
}
------解决方案--------------------如果datetime_t时间的定义和tm是一样的,那这样修改该就可以了。
stime->tm_mon = ptime.month - 1;
stime->tm_year = ptime.year - 1900;
用man mktime查看帮助,得到如下信息:
tm_mday The day of the month, in the range 1 to 31.
tm_mon The number of months since January, in the range 0 to 11.
tm_year The number of years since 1900.
说明tm_year的0值是对应于1900年。
另外修改系统时间是需要管理员权限的,修改完成后最好立即用hwclock命令更新到RTC。