#include <stdio.h>
#include<sys/time.h>
#include<unistd.h>
#include <time.h>
int SetSystemTime(char *dt)
{
struct tm rtc_time;
struct tm _tm;
struct timeval tv;
time_t timep;
sscanf(dt, "%d-%d-%d %d:%d:%d", &rtc_time.tm_year,
&rtc_time.tm_mon, &rtc_time.tm_mday,&rtc_time.tm_hour,
&rtc_time.tm_min, &rtc_time.tm_sec);
_tm.tm_sec = rtc_time.tm_sec;
_tm.tm_min = rtc_time.tm_min;
_tm.tm_hour = rtc_time.tm_hour;
_tm.tm_mday = rtc_time.tm_mday;
_tm.tm_mon = rtc_time.tm_mon - 1;
_tm.tm_year = rtc_time.tm_year - 1900;
timep = mktime(&_tm);
tv.tv_sec = timep;
tv.tv_usec = 0;
if(settimeofday (&tv, (struct timezone *) 0) < 0)
{
printf("Set system datatime error!/n");
return -1;
}
return 0;
}
int main()
{
SetSystemTime("2006-4-20 20:30:30");
return 0;
}
用mktime的一些坑(月份未减一所导致的问题)_Wmll1234567的博客-CSDN博客_tm_isdst=0
用mktime函数时,月份未减一,年份减1900
time_t mktime(struct tm *)
其中的tm结构体定义如下:
struct tm {
int tm_sec;/* 秒 – 取值区间为[0,59] */
int tm_min; /* 分 - 取值区间为[0,59] */
int tm_hour;/* 时 - 取值区间为[0,23] */
int tm_mday; /* 一个月中的日期 - 取值区间为[1,31] */
int tm_mon;/* 月份(从一月开始,0代表一月) - 取值区间为[0,11]*/
int tm_year; /* 年份,其值等于实际年份减去1900 */
int tm_wday; /* 星期 – 取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 */
int tm_yday; /* 从每年的1月1日开始的天数 – 取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 */
int tm_isdst; /* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。*/
};
struct timeval结构体:
struct timeval
{
long tv_sec; /*秒*/
long tv_usec; /*微秒*/
};
time_t time(time_t *t); //取得从1970年1月1日至今的秒数,time_t 是个整数类型,秒数。