当前位置 主页 > 服务器问题 > Linux/apache问题 >

    Linux下用C获取当前时间

    栏目:Linux/apache问题 时间:2019-10-07 22:02

    Linux下用C获取当前时间,具体如下:

    代码(可以把clock_gettime换成time(NULL))

    void getNowTime()
    {
     timespec time;
     clock_gettime(CLOCK_REALTIME, &time); //获取相对于1970到现在的秒数
     tm nowTime;
     localtime_r(&time.tv_sec, &nowtime);
     char current[1024];
     sprintf(current, "%04d%02d%02d%02d:%02d:%02d", nowTime.tm_year + 1900, nowTime.tm_mon, nowTime.tm_mday, 
      nowTime.tm_hour, nowTime.tm_min, nowTime.tm_sec);
    }

    分析:

    clock_gettime()

     函数"clock_gettime"是基于Linux C语言的时间函数,他可以用于计算精度和纳秒。

    语法:

    #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; /* 纳秒*/
    
    };
    

    localtime()

    localtime是 把从1970-1-1零点零分到当前时间系统所偏移的秒数时间转换为本地时间.

    语法

    说明:此函数获得的tm结构体的时间是日历时间。

    用 法: struct tm *localtime(const time_t *clock);

    返回值:返回指向tm 结构体的指针.tm结构体是time.h中定义的用于分别存储时间的各个量(年月日等)的结构体.

    例1:

    #include <stdio.h>
    #include <stddef.h>
    #include <time.h>
    int main(void)
    {
     time_t timer;//time_t就是long int 类型
     struct tm *tblock;
     timer = time(NULL);
     tblock = localtime(&timer);
     printf("Local time is: %s\n", asctime(tblock));
     return 0;
    }
    

    执行结果:

    Local time is: Mon Feb 16 11:29:26 2009

    例2:

    上面的例子用了asctime函数,下面这个例子不使用这个函数一样能获取系统当前时间。需要注意的是年份加上1900,月份加上1。

    #include<time.h>
    #include<stdio.h>
    int main()
    {
     struct tm *t;
     time_t tt;
     time(&tt);
     t = localtime(&tt);
     printf("%4d年%02d月%02d日 %02d:%02d:%02d\n", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
     return 0;
    }
    

    localtime()与localtime_r()的区别

    localtime():

    #include <cstdlib> 
    #include <iostream> 
    #include <time.h> 
    #include <stdio.h> 
     
    using namespace std; 
     
    int main(int argc, char *argv[]) 
    { 
     time_t tNow =time(NULL); 
     time_t tEnd = tNow + 1800; 
     //注意下面两行的区别 
     struct tm* ptm = localtime(&tNow); 
     struct tm* ptmEnd = localtime(&tEnd); 
     
     char szTmp[50] = {0}; 
     strftime(szTmp,50,"%H:%M:%S",ptm); 
     char szEnd[50] = {0}; 
     strftime(szEnd,50,"%H:%M:%S",ptmEnd); 
      
     
     printf("%s /n",szTmp); 
     printf("%s /n",szEnd); 
      
     
     system("PAUSE"); 
     return EXIT_SUCCESS; 
    }