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* 形式日历形式的时间

#include <time.h>
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 <sys/time.h>
#include <stdio.h>
int main()
{
    time_t t;
    time(&t);
    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;
  }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值