• linux 或c 时间相关处理类型和函数


    注意
    1.精确级别,纳秒级别
    原型
    long  clock_gettime (clockid_t which_clock, struct timespec *tp);

    头文件time.h
    which_clock参数解释
    CLOCK_REALTIME:系统实时时间,随系统实时时间改变而改变,即从UTC1970-1-1 0:0:0开始计时,中间时刻如果系统时间被用户该成其他,则对应的时间相应改变
    CLOCK_MONOTONIC:从系统启动这一刻起开始计时,不受系统时间被用户改变的影响
    CLOCK_PROCESS_CPUTIME_ID:本进程到当前代码系统CPU花费的时间
    CLOCK_THREAD_CPUTIME_ID:本线程到当前代码系统CPU花费的时间

    struct timespect *tp用来存储当前的时间,其结构如下:
    1 struct timespec {
    2 time_t tv_sec; /* seconds */
    3 long tv_nsec; /* nanoseconds */
    4 };
    #include <stdio.h>
    #include <time.h>
    
    struct timespec diff(struct timespec start,struct timespec end)
    {
        struct timespec temp;
        if((end.tv_nsec-start.tv_nsec)<0)
        {
            temp.tv_sec = end.tv_sec-start.tv_sec-1;
            temp.tv_nsec = 1000000000 + end.tv_nsec-start.tv_nsec;
        }
        else
        {
            temp.tv_sec = end.tv_sec-start.tv_sec;
            temp.tv_nsec = end.tv_nsec-start.tv_nsec;
        }
        return temp;
    }
    
    int main()
    {
        struct timespec time1,time2,temp;
        int i;
        clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1);
        for(i=0; i<10000;i++)
        {
            ;
        }
        clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2);
        temp = diff(time1, time2);
        printf("%d:%d
    ", temp.tv_sec, temp.tv_nsec);
        return 0;    
    }
    在标准C/C++中,我们可通过tm结构来获得日期和时间,tm结构在time.h中的定义如下:
    #ifndef _TM_DEFINED
    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] */
    int tm_year; /* 年份,其值从1900开始 */
    int tm_wday; /* 星期–取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 */
    int tm_yday; /* 从每年的1月1日开始的天数–取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 */
    int tm_isdst; /* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。*/
    long int tm_gmtoff; /*指定了日期变更线东面时区中UTC东部时区正秒数或UTC西部时区的负秒数*/
    const char *tm_zone; /*当前时区的名字(与环境变量TZ有关)*/
    };
    #define _TM_DEFINED
    #endif
    ANSI C标准称使用tm结构的这种时间表示为分解时间(broken-down time)。
    可以使用的函数是gmtime()和localtime()将time()获得的日历时间time_t结构体转换成tm结构体。
    其中gmtime()函数是将日历时间转化为世界标准时间(即格林尼治时间),并返回一个tm结构体来保存这个时间,而localtime()函数是将日历时间转化为本地时间。
    #include<stdio.h>
      2 #include<time.h>
      3 
      4 int main()
      5 {
      6     struct tm *ptr;
      7     time_t lt;
      8     lt=time(NULL);
      9 
     10     ptr=localtime(&lt);
     11     
     12     printf("second:%d
    ",ptr->tm_sec);
     13     printf("hour:%d
    ",ptr->tm_hour);
     14     
     15 }   
    ~          
     strftime,是一种计算机函数,strftime() 函数根据区域设置格式化本地时间/日期,函数的功能将时间格式化,或者说格式化一个时间字符串。
     
    size_t strftime(
    char *strDest,
    size_t maxsize,
    const char *format,
    const  struct tm *timeptr
    );
    而下面的程序则显示当前的完整日期:
    #include<stdio.h>
    #include<time.h>
    
    int main()
    {
            struct tm* newtime;
            char tmp[128];
    
            time_t lt1;
            time(&lt1);
    
            newtime=localtime(&lt1);
    
            strftime(tmp,128,"today is %A,day %d of $B in the year %Y.
    ",newtime);
            printf("%s
    ",tmp);
    }
        struct tm *ttime;
            char now[64];
            time_t tt;
    
            memset(now, 0, 64);
            tt = time(NULL);
            ttime = localtime(&tt);
            strftime(now, 64, "%Y-%m-%d %H:%M:%S", ttime);        

    clock函数使用:

    http://www.cnblogs.com/youxin/archive/2012/04/15/2450242.html

    计算持续时间的长度

    有时候在实际应用中要计算一个事件持续的时间长度,比如计算打字速度。在第1节计时部分中,我已经用clock函数举了一个例子。Clock()函数可以精确到毫秒级。同时,我们也可以使用difftime()函数,但它只能精确到秒。该函数的定义如下:

    double difftime(time_t time1, time_t time0);

    虽然该函数返回的以秒计算的时间间隔是double类型的,但这并不说明该时间具有同double一样的精确度,这是由它的参数觉得的(time_t是以秒为单位计算的)。

    更多:

    http://blog.csdn.net/limi0066/article/details/1761564

    struct itimerval { 
    struct timeval it_interval;
    struct timeval it_value;
    }
  • 相关阅读:
    服务端增加WCF服务全局异常处理机制
    ASP.NET MVC异常处理方案
    [你必须知道的异步编程]C# 5.0 新特性——Async和Await使异步编程更简单
    Asp.Net Mvc的几个小问题
    C# 多线程之Thread类
    C#泛型
    c#public、private、protected、internal、protected internal
    ASP.NET并发处理
    GDB调试器的使用
    【多媒体封装格式详解】---MKV
  • 原文地址:https://www.cnblogs.com/youxin/p/4320697.html
Copyright © 2020-2023  润新知