本篇文章主要介绍了Linux操作系统操作系统获取当前时间的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Linux操作系统操作系统下用C获取当前时间,具体如下:
代码(可以把clock_gettime换成time(NULL))
void getNowTime()
{
时间规格时间;
clock_gettime(CLOCK_REALTIME,time);//获取相对于1970到现在的秒数
tm nowTime
localtime_r(time.tv_sec,现在时间);
充电电流[1024];
sprintf(当前,'dddd:d:d',nowtime.tm_year 1900,nowTime.tm_mon,nowTime.tm_mday,
nowTime.tm_hour,nowTime.tm_min,现在时间。TM _ sec);
}
分析:
clock_gettime()
函数'时钟_获取时间'是基于Linux C语言的时间函数,他可以用于计算精度和纳秒。
语法:
#includetime.h
int clock _ gettime(clock id _ t clk _ id,struct timespec * TP);
参数:
时钟标识:检索和设置的时钟标识指定的时钟时间。
时钟_实时:系统实时时间,随系统实时时间改变而改变,即从UTC1970-1-1 0:0:0开始计时,中间时刻如果系统时间被用户改成其他,则对应的时间相应改变
时钟_单调性:从系统启动这一刻起开始计时,不受系统时间被用户改变的影响
时钟_进程_CPUTIME_ID:本进程到当前代码系统中央处理器花费的时间
时钟_线程_CPUTIME_ID:本线程到当前代码系统中央处理器花费的时间
结构时间规范
{
时间电视秒/*秒*/
长tv _ nsec/*纳秒*/
};
localtime()
本地时间是把从1970-1-1零点零分到当前时间系统所偏移的秒数时间转换为本地时间。
语法
说明:此函数获得的铥结构体的时间是日历时间。
用法:struct TM *本地时间(const time _ t * clock);
返回值:返回指向铥结构体的指针。铥结构体是时间。h中定义的用于分别存储时间的各个量(年月日等)的结构体。
例1:
#包含标准视频
#包含标准定义
#包含时间。h
int main(void)
{
时间_t定时器;//time_t就是长整型类型
struct tm * tblock
定时器=时间(空);
tblock=localtime(定时器);
printf('本地时间是:%s\n ',ASC时间(t块));
返回0;
}
执行结果:
当地时间是:2009年2月16日11时29分26秒
例2:
上面的例子用了asctime函数,下面这个例子不使用这个函数一样能获取系统当前时间。需要注意的是年份加上1900,月份加上1。
#includetime.h
# includestdio.h
int main()
{
struct TM * t;
电汇时间;
时间(TT);
t=本地时间(TT);
printf('M年d月d日d:d:d\n',t-TM _ 1900年,t-tm_mon 1,t-tm_mday,t-tm_hour,t-tm_min,t-TM _ sec);
返回0;
}
localtime()与localtime_r()的区别
本地时间():
#包含cstdlib
#包括输入输出流
#包含时间。h
#包含标准视频
使用命名空间标准
int main(int argc,char *argv[])
{
time _ t tNow=时间(空);
time _ t tEnd=现在1800
//注意下面两行的区别
struct TM * PTM=当地时间(tNow);
struct TM * pt mend=当地时间(tEnd);
char szTmp[50]={ 0 };
strftime(szTmp,50,' %H:%M:%S ',PTM);
char szEnd[50]={ 0 };
strftime(szEnd,50,' %H:%M:%S ',pt mend);
printf('%s /n ',szTmp);
printf('%s /n ',szEnd);
系统("暂停");
返回退出_成功
}
最后出来的结果是:
21:18:39
21:18:39
和最初想法不一致。
查阅本地时间的文档,发现这段话:
这个结构由函数gmtime和本地时间静态分配和共享。每次调用这些函数中的任何一个,这个结构的内容都会被覆盖。
也就是说每次只能同时使用本地时间()函数一次,要不就会被重写!
本地时间()函数不必是可重入的。不要求可重入的函数也不要求线程安全。
因此本地时间()不是可重入的。同时libc里提供了一个可重入版的函数本地时间_ r();
与本地时间()不同,可重入版本不需要设置tzname。
修改程序:(本地时间_r())
#包含cstdlib
#包括输入输出流
#包含时间。h
#包含标准视频
使用命名空间标准
int main(int argc,char *argv[])
{
time _ t tNow=时间(空);
time _ t tEnd=tNow 1800
//在这里修改程序
//struct TM * PTM=local time(tNow);
//struct TM * pt mend=local time(tEnd);
struct TM PTM={ 0 };
struct TM pt mend={ 0 };
localtime_r(tNow,PTM);
localtime_r(tEnd,pt mend);
char szTmp[50]={ 0 };
strftime(szTmp,50,' %H:%M:%S ',PTM);
char szEnd[50]={ 0 };
strftime(szEnd,50,' %H:%M:%S ',pt mend);
printf('%s /n ',szTmp);
printf('%s /n ',szEnd);
系统(“暂停”);
返回EXIT _ SUCCESS
}
最后的结果是:
10:29:06
10:59:06
tm
结构tm {
int tm _ sec/*秒取值范围为[0,59] */
int tm _ min/*分钟值间隔为[0,59] */
int tm _ hour/*时间值区间为[0,23] */
int tm _ mday/*一个月中的日期-取值范围为[1,31] */
int tm _ mon/*月(从一月开始,0代表一月)-取值范围为[0,11] */
int tm _ year/* year,其值等于实际年份减去1900 */
int tm _ wday/* Week取值范围为[0,6],其中0代表星期日,1代表星期一*/
int tm _ yday/*从每年1月1日开始的天数取值范围[0,365],其中0表示1月1日*/
int tm _ isdst/*夏令时标识符,夏令时tm_isdst为正;Tm_isdst为0 */
};
time 函数
返回:自1970年1月1日00: 00: 00以来的秒数。
原型:time_t时间(time_t *calptr)
结果可以通过返回值或参数获得,如示例所示。
头文件time.h
返回值:
成功:秒数,从1970-1-1,00:00:00,可作为整数输出或用于其他函数。
失败:-1
示例:
time _ t now
时间(现在);//相当于now=time(空)
printf('现在时间是%d\n ',现在);
这就是本文的全部内容。希望对大家的学习有帮助,支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。