Linux通过系统函数设置系统时间
一、描述
通过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! "); 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. 设置时间之前最好把虚拟机网络断开。
上一篇:
Python 安装包管理工具 pip