一、描述
通过settimeofday()函数来设置系统时间,这个函数设置的精度可以精确到微秒。
#include <time.h>
int settimeofday(const struct timeval *tv , const struct timezone *tz);
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
struct timezone {
int tz_minuteswest; /* minutes west of Greenwich */
int tz_dsttime; /* type of DST correction */
};
tz参数为时区,时区结构中tz_dsttime在linux中不支持,应该置为0,通常将参数tz设置为NULL,表示使用当前系统的时区。该函数是glib中的,但在mingw中没有实现。
二、代码演示
#include <stdio.h>
#include <stdlib.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)
if(settimeofday (&tv, NULL) < 0)
{
printf("Set system datatime error!\n");
return -1;
}
printf("现在的时间是:");
fflush(stdout);
system("date");
return 0;
}
int main()
{
SetSystemTime("2019-11-03 16:30:30");//2019-11-01 21:19:05
return 0;
}
三、效果如下
注意:
1. 调用settimeofday函数时必须要在root权限下执行。
2. 设置时间之前最好把虚拟机网络断开。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)