赞
踩
我们在本文中总结了获取系统时间的各种方法,
本文总结设置系统时间的方法
如上图所示:通过time函数取得世纪秒,-----》通过localtime 转换成struct tm----------->通过mktime函数又转换成time_t格式。
#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
头文件:#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,,此变量的各个值需要我们去赋值。
以上的时间,总共涉及到三种数据类型:
time_t(也就是long)
struct tm;
struct timeval;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。