c语⾔中获取当前时间的函数设置系统时间。
1、time()函数
#include <time.h>
typedef long time_t;//time_t实际是long类型数据。
time_t time( time_t * ) ;      //time_t 是long类型
//返回从1970年1⽉1⽇0时0分0秒,到现在的的秒数
#include <time.h>
time_t t;
time_t time(&t); //返回从1970年1⽉1⽇0时0分0秒,到现在的的秒数
time(&t);中t的取值  和time(NULL)的返回值相等,即⼆者等价。
2、struct tm * localtime(const time_t * timer);  //将世纪秒转换成对应的年⽉⽇时分秒;
其中:
struct 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] ,需要+1 */
int tm_year;    /* 年份,其值等于实际年份减去1900 */
int tm_wday;    /* 星期 – 取值区间为[0,6],其中0代表星期天,1代表星期⼀ */
int tm_yday;    /* 从每年1⽉1⽇开始的天数– 取值区间[0,365],其中0代表1⽉1⽇ */
int tm_isdst;    /* 夏令时标识符,夏令时tm_isdst为正;不实⾏夏令时tm_isdst为0 */
};
所以在输出年时要加1900,输出⽉要加1,⼀般输出前6个
(长年累⽉的加)
3、char * ctime(const time_t *timer);
将time_t时间转换成 char* 形式⽇历形式的时间
int main()
{
time_t t;
struct tm *st ;
char *ch ;
time(&t);
printf("time:%d\n", t );
ch = ctime(&t) ;
printf("ctime:%s\n", ch );
st = localtime(&t);
printf("year=%d\n", st->tm_year+1900 );  //年需要加1900
printf("month=%d\n", st->tm_mon+1 );    //⽉需要加1
printf("day=%d\n", st->tm_mday );      //其他的不⽤
return 0;
}
4、gettimeofday()//精确度更⾼,精确到微秒
#include<sys/time.h>  //此函数头⽂件中需要添加sys才好⽤。
int gettimeofday(struct  timeval*tv,struct  timezone *tz )      //第⼆个参数tz⼀般都为空,因为不需要第2个参数的值 struct  timeval{
long  tv_sec;/*秒*/
long  tv_usec;/*微秒*/
};
struct  timezone{
int tz_minuteswest;/*和greenwich 时间差了多少分钟*/
int tz_dsttime;/*type of DST correction*/
};
#include <stdio.h>
int main()
{
time_t t;
time(&t);
c语言struct头文件printf("time:%d\n", t );    //time(&t);
struct  timeval    tv;
struct  timezone  tz;
gettimeofday(&tv,&tz);
printf("tv_sec:%d\n",tv.tv_sec);    //gettimeofday(&tv,&tz);
printf("tv_usec:%d\n",tv.tv_usec);
printf("tz_minuteswest:%d\n",tz.tz_minuteswest);
printf("tz_dsttime:%d\n",tz.tz_dsttime);
}
上述程序使⽤gettimeofday()显⽰结果表明当前距1970年1⽉1⽇0时0分0秒有1587450597.989175s
⼩结:
1) time(&t);和  //gettimeofday(&tv,&tz);中 tv.tv_sec;  的值⼀样的。
2)gettimeofday()可以精确到微秒,在测试程序代码执⾏时间上⽤的⽐较多。
3)gettimeofday()函数的头⽂件为  #include <sys/time.h> 写成#include <time.h>报错。(为Linux系统函数??)
4)gettimeofday()我们⼀般写成gettimeofday(&tv,NULL);因为我们不想知道2参的情况。
5、clock_gettime()函数,与gettimeofday类似,但精确度到更⾼,可以精确到纳秒
#include <time.h>
int clock_gettime(clockid_t clk_id, struct timespec* tp);
clk_id : 检索和设置的clk_id指定的时钟时间。
CLOCK_REALTIME:系统实时时间,随系统实时时间改变⽽改变,即从UTC1970-1-1 0:0:0开始计时,中间时刻如果系统时间被⽤户改成其他,则对应的时间相应改变
  CLOCK_MONOTONIC:从系统启动这⼀刻起开始计时,不受系统时间被⽤户改变的影响
  CLOCK_PROCESS_CPUTIME_ID:本进程到当前代码系统CPU花费的时间
  CLOCK_THREAD_CPUTIME_ID:本线程到当前代码系统CPU花费的时间
struct timespec
{
time_t tv_sec; /* 秒*/
long tv_nsec; /* 纳秒*/
};
#define BILLION  1000000000L;
int main( int argc, char** argv )
{
struct timespec start, stop;
double accum;
if( clock_gettime( CLOCK_REALTIME, &start) == -1 ) {      perror( "clock gettime" );
return EXIT_FAILURE;
}
system( argv[1] );
if( clock_gettime( CLOCK_REALTIME, &stop) == -1 ) {      perror( "clock gettime" );
return EXIT_FAILURE;
}
accum = ( stop.tv_sec - start.tv_sec )
+ (double)( stop.tv_nsec - start.tv_nsec )
/ (double)BILLION;
printf( "%lf\n", accum );
return EXIT_SUCCESS;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。