linuxtimet
㈠ 在linux下, 用C如何设置日期
1.时间表示
在程序当中,我们经常要输出系统当前的时间,比如我们使用date命令的输出结果.这个时候我们可以使用下面两个函数:
#include
time_t time(time_t *tloc);
char *ctime(const time_t *clock);
time函数返回从1970年1月1日0点以来的秒数.存储在time_t结构之中.不过这个函数的返回值对于我们来说没有什么实际意义.这个时候我们使用第二个函数将秒数转化为字符串. 这个函数的返回类型是固定的:一个可能值为.Thu Dec7 14:58:59 2000 这个字符串的长度是固定的为26.
2.时间的测量
有时候我们要计算程序执行的时间.比如我们要对算法进行时间分析.这个时候可以使用下面这个函数. #include int gettimeofday(struct timeval *tv,struct timezone *tz); strut timeval { long tv_sec; /* 秒数 */ long tv_usec; /* 微秒数 */ }; gettimeofday将时间保存在结构tv之中.tz一般我们使用NULL来代替. #include #include #include void function() { unsigned int i,j; double y; for(i=0;i<1000;i++) for(j=0;j<1000;j++) y=sin((double)i); } main() { struct timeval tpstart,tpend; float timeuse; gettimeofday(&tpstart,NULL); function(); gettimeofday(&tpend,NULL); timeuse=1000000*(tpend.tv_sec-tpstart.tv_sec)+ tpend.tv_usec-tpstart.tv_usec; timeuse/=1000000; printf("Used Time:%f\n",timeuse); exit(0); }
这个程序输出函数的执行时间,我们可以使用这个来进行系统性能的测试,或者是函数算法的效率分析.在我机器上的一个输出结果是: Used Time:0.556070
㈡ linux怎么读区间函数
系统环境:ubuntu10.04
简介
本文旨在为了解Linux各种时间类型与时间函数提供技术文档。
1、Linux下常用时间类型
Linux下常用时间类型有四种:time_t、structtm、structtimeval、structtimespec
1.1time_t时间类型
time_t类型在time.h中定义:
[cpp]view plain
#ifndef__TIME_T
#define__TIME_T
typedeflongtime_t;
#endif
#ifndef_TM_DEFINED
structtm{
inttm_sec;/*秒-取值区间为[0,59]*/
inttm_min;/*分-取值区间为[0,59]*/
inttm_hour;/*时-取值区间为[0,23]*/
inttm_mday;/*日-取值区间为[1,31]*/
inttm_mon;/*月份-取值区间为[0,11]*/
inttm_year;/*年份-其值为1900年至今年数*/
inttm_wday;/*星期-取值区间[0,6],0代表星期天,1代表星期1,以此类推*/
inttm_yday;/*从每年的1月1日开始的天数-取值区间为[0,365],0代表1月1日*/
inttm_isdst;/*夏令时标识符,使用夏令时,tm_isdst为正,不使用夏令时,tm_isdst为0,不了解情况时,tm_isdst为负*/
};
#define_TM_DEFINED
#endif
Structtmieval{
time_ttv_sec;/*秒s*/
suseconds_ttv_usec;/*微秒us*/
};
structtimespec{
time_ttv_sec;/*秒s*/
longtv_nsec;/*纳秒ns*/
};
time_tseconds;
seconds=time((time_t*)NULL);
time_ttimep;
tmep=time(NULL);
printf("%s ",ctime(&timep));
intmain(void)
{
char*wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
time_ttimep;
structtm*p_tm;
timep=time(NULL);
p_tm=gmtime(&timep);/*获取GMT时间*/
printf("%d-%d-%d",(p_tm->tm_year+1900),(p_tm->mon+1),p_tm->tm_mday);
printf("%s%d:%d:%d ",wday[p_tm->tm_wday],p_tm->tm_hour,p_tm->tm_min,p_tm->tm_sec);
}
intmain(void)
{
char*wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
time_ttimep;
structtm*p_tm;
timep=time(NULL);
p_tm=localtime(&timep);/*获取本地时区时间*/
printf("%d-%d-%d",(p_tm->tm_year+1900),(p_tm->mon+1),p_tm->tm_mday);
printf("%s%d:%d:%d ",wday[p_tm->tm_wday],p_tm->tm_hour,p_tm->tm_min,p_tm->tm_sec);
return0;
}
intmain(void)
{
time_ttimep:
structtm*p_tm;
timep=time(NULL);
pintf("time():%d ",timep);
p_tm=local(&timep);
timep=mktime(p_tm);
printf("time()->localtime()->mktime():%d ",timep);
return0;
}
intmain(void)
{
time_ttimep;
timep=time(NULL);
printf("%s ",asctime(gmtime(&timep)));
return0;
}
intmain(void)
{
time_ttimep1,timep2;
timep1=time(NULL);
sleep(2);
timep2=time(NULL);
printf("thedifferenceis%fseconds ",difftime(timep1,timep2));
return0;
}
structtimezone{
inttz_minuteswest;/*miniuteswestofGreenwich*/
inttz_dsttime;/*typeofDSTcorrection*/
};
structtimevaltv;
structtimevaltz;
gettimeofday(&tv,&tz);
intmain(void)
{
charstrtime[20]={0};
time_ttimep;
structtm*p_tm;
timep=time(NULL);
p_tm=localtime(&timep);
strftime(strtime,sizeof(strtime),"%Y-%m-%d%H:%M:%S",p_tm);
return0;
}
intmain(void)
{
chart_string[]="2012-04-2822:30:00";
structtmtime_tm;
structtimevaltime_tv;
time_ttimep;
intret=0;
sscanf(t_string,"%d-%d-%d%d:%d:%d",&time_tm.tm_year,&time_tm.tm_mon,&time_tm.tm_mday,&time_tm.tm_hour,&time_tm.tm_min,&time_tm.tm_sec);
time_tm.tm_year-=1900;
time_tm.tm_mon-=1;
time_tm.tm_wday=0;
time_tm.tm_yday=0;
time_tm.tm_isdst=0;
timep=mktime(&time_tm);
time_tv.tv_sec=timep;
time_tv.tv_usec=0;
ret=settimeofday(&time_tv,NULL);
if(ret!=0)
{
fprintf(stderr,"settimeofdayfailed ");
return-1;
}
return0;
}
可见,time_t实际是一个长整型。其值表示为从UTC(coordinateniversaltime)时间1970年1月1日00时00分00秒(也称为Linux系统的Epoch时间)到当前时刻的秒数。由于time_t类型长度的限制,它所表示的时间不能晚于2038年1月19日03时14分07秒(UTC)。为了能够表示更久远的时间,可用64位或更长的整形数来保存日历时间,这里不作详述。
使用time()函数获取当前时间的time_t值,使用ctime()函数将time_t转为当地时间字符串。
备注:UTC时间有时也称为GMT时间,其实UTC和GMT两者几乎是同一概念。它们都是指格林尼治标准时间,只不过UTC的称呼更为正式一点。两者区别在于前者是天文上的概念,而后者是基于一个原子钟。
1.2structtm时间类型
tm结构在time.h中定义:
[cpp]view plain
ANSIC标准称使用tm结构的这种时间表示为分解时间(broken-downtime)。
使用gmtime()和localtime()可将time_t时间类型转换为tm结构体;
使用mktime()将tm结构体转换为time_t时间类型;
使用asctime()将structtm转换为字符串形式。
1.3structtimeval时间类型
timeval结构体在time.h中定义:
[cpp]view plain
设置时间函数settimeofday()与获取时间函数gettimeofday()均使用该事件类型作为传参。
1.4structtimespec时间类型
timespec结构体在time.h定义:
[cpp]view plain
2、Linux下常用时间函数
Linux下常用时间函数有:time()、ctime()、gmtime()、localtime()、mktime()、asctime()、difftime()、gettimeofday()、settimeofday()
2.1time()函数
头文件:#include<time.h>
函数定义:time_ttime(time_t*timer)
功能描述:该函数返回从1970年1月1日00时00分00秒至今所经过的秒数。如果time_t*timer非空指针,函数也会将返回值存到timer指针指向的内存。
返回值:成功则返回秒数,失败则返回((time_t)-1)值,错误原因存于errno中。
例:
[cpp]view plain
2.2ctime()函数
头文件:#include<time.h>
函数定义:char*ctime(consttime_t*timep);
功能描述:ctime()将参数timep指向的time_t时间信息转换成实际所使用的时间日期表示方法,并以字符串形式返回。字符串格式为:"WedJun2021:00:002012
"。
例:
[cpp]view plain
2.3gmtime()函数
头文件:#include<time.h>
函数定义:structtm*gmtime(consttime_t*timep)
功能描述:gmtime()将参数timep指向的time_t时间信息转换成以tm结构体表示的GMT时间信息,并以structtm*指针返回。
GMT:GMT是中央时区,北京在东8区,相差8个小时,所以北京时间=GMT时间+8小时。
例:
[cpp]view plain
2.4localtime()函数
头文件:#include<time.h>
函数定义:structtm*localtime(consttime_t*timep);
功能描述:localtime()将参数timep指向的time_t时间信息转换成以tm结构体表示的本地时区时间(如北京时间=GMT+小时)。
例:
[cpp]view plain
2.5mktime()函数
头文件:#include<time.h>
函数定义:time_tmktime(structtm*p_tm);
功能描述:mktime()将参数p_tm指向的tm结构体数据转换成从1970年1月1日00时00分00秒至今的GMT时间经过的秒数。
例:
[cpp]view plain
2.6asctime()函数
头文件:#include<time.h>
函数定义:char*asctime(conststructtm*p_tm);
功能描述:asctime()将参数p_tm指向的tm结构体数据转换成实际使用的时间日期表示方法,并以字符串形式返回(与ctime函数相同)。字符串格式为:"WedJun2021:00:002012
"。
例:
[cpp]view plain
2.7difftime()函数
头文件:#include<time.h>
函数定义:doubledifftime(time_ttimep1,time_ttimep2);
功能描述:difftime()比较参数timep1和timep2时间是否相同,并返回之间相差秒数。
例:
[cpp]view plain
2.8gettimeofday()函数
头文件:#include<sys/time.h>
#include<unistd.h>
函数定义:intgettimeofday(structtimeval*tv,structtimezone*tz);
功能描述:gettimeofday()把目前的时间信息存入tv指向的结构体,当地时区信息则放到tz指向的结构体。
structtimezone原型:
[cpp]view plain
例:
[cpp]view plain
附:
使用time函数族获取时间并输出指定格式字符串例子(strftime()函数):
[cpp]view plain
2.9settimeofday()函数
头文件:#include<sys/time.h>
#include<unistd.h>
函数定义:intsettimeofday(conststructtimeval*tv,conststructtimezone*gz);
功能描述:settimeofday()把当前时间设成由tv指向的结构体数据。当前地区信息则设成tz指向的结构体数据。
例:
[cpp]view plain
㈢ linux中用time函数和sprintf函数获取系统时间的问题
t=localtime(&tt);
sprintf(year,"%d",t->tm_year+1900);
要加1900的。
给你看看我的代码,另外一种形式,非常简单,记得采纳给分。
time_t t;
time(&t);
char time_str[256]={0};
struct tm* tp= localtime(&t);
strftime(time_str,100,"%Y-%m-%d-%H:%M:%S",tp);
打印这个字符串就是系统当前的时间。