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;

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值