linux平台设置系统时间

我们在本文中总结了获取系统时间的各种方法,

本文总结设置系统时间的方法

1、前言

如上图所示:通过time函数取得世纪秒,-----》通过localtime 转换成struct tm----------->通过mktime函数又转换成time_t格式。 

1)time_t mktime(strcut tm * timeptr);

#include <time.h>

mktime()用来将参数timeptr所指的tm结构数据转换成从公元1970年1月1日0时0分0 秒算起至今的UTC时间所经过的秒数。

返回经过的秒数。

实质:是将 struct tm 结构转换成----->time_t(也就是long类型)

示例:

#include <stdio.h>

#include <time.h>

main()

{

time_t timep;

strcut tm *p;

time(&timep);

printf("time() : %d /n",timep);

p=localtime(&timep);

timep = mktime(p);

printf("time()->localtime()->mktime():%d/n",timep);

}

执行

time():974943297

time()->localtime()->mktime():974943297
————————————————
上述示例转载:
版权声明:本文为CSDN博主「小宇巴巴」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xuefu2008/article/details/4645899

2、设置系统时间------settimeofday

头文件:#include <sys/time.h>    #include <unistd.h> 

定义函数:int settimeofday(const struct timeval *tv, const struct timezone *tz); 

函数说明:settimeofday()会把目前时间设成由tv 所指的结构信息,当地时区信息则设成tz 所指的结构。详细的说明请参考gettimeofday()。 

注意,在Linux下,只有root 权限才能使用此函数修改时间。 

返回值:成功则返回0,失败返回-1,错误代码存于errno。 

错误代码: 
EPERM  并非由root 权限调用settimeofday(),权限不够。 
EINVAL  时区或某个数据是不正确的,无法正确设置时间。
————————————————
版权声明:本文为CSDN博主「Michaelwubo」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Michaelwubo/article/details/41119905

可以看到,我们使用settimeofday函数来设置系统时间,此时时间的数据类型又变为 struct timevalue了。

    struct timeval now;
    struct tm local; //
    local.tm_year =  year-1900;
    local.tm_mon  = mon - 1;
	local.tm_mday = day;
	local.tm_hour = hour;
	local.tm_min = min;
	local.tm_sec = sec;


    time_t gps_soc=mktime(&local);
	now.tv_sec=gps_soc;
	now.tv_usec=0;
	settimeofday(&now,NULL);

上例我们可以看到,我们并没有使用通过time();函数直接获取soc,   而是通过mktime函数将 struct tm 结构体 先转换成了soc,这是因为我们自定义了一个struct tm 的变量local,,此变量的各个值需要我们去赋值

3、总结:

以上的时间,总共涉及到三种数据类型:

time_t(也就是long)

struct tm;

struct timeval;

猜你喜欢

转载自blog.csdn.net/modi000/article/details/114522048#comments_22872884