zoukankan      html  css  js  c++  java
  • C <time.h> 时间头文件

    一、几个时间概念

    1.1 UTC:世界标准时间

      协调世界时,又称为世界标准时间,为大家所熟知的格林威治标准时间(Greenwich Mean Time,GMT)。比如,中国内地的时间与UTC的时差为+8,也就是UTC+8。美国是UTC-5。

    1.2 Calendar Time:日历时间

      “从一个标准时间点到此时的时间经过的秒数”来表示的时间。

      这个标准时间点对不同的编译器来说会有所不同,但对一个编译系统来说,这个标准时间点是不变的,该编译系统中的时间对应的日历时间都通过该标准时间点来衡量,所以可以说日历时间是“相对时间”,但是无论你在哪一个时区,在同一时刻对同一个标准时间点来说,日历时间都是一样的。

    1.3 Epoch:时间点

      时间点在标准C/C++中是一个整数,它用此时的时间和标准时间点相差的秒数(即日历时间)来表示。

    1.4 Clock tick:时钟计时单元

      一个时钟计时单元的时间长短是由CPU控制的。一个clock tick不是CPU的一个时钟周期,而是C/C++的一个基本计时单位。

    二、具体操作示例及解释

     2.1 计时

      计时函数:clock();

      数据类型:clock_t,为long数据类型;

      定义:clock_t clock(void);

        #ifndef _CLOCK_T_DEFINED 
        typedef long clock_t; 
        #define _CLOCK_T_DEFINED 
        #endif

      描述:从“开启这个程序进程”到“程序中调用clock()函数”时,处理器时钟所使用的时间。为了获取 CPU 所使用的秒数,您需要除以 CLOCKS_PER_SEC。

      返回:该函数返回自程序启动起,处理器时钟所使用的时间。如果失败,则返回 -1 值。

     1 #include <time.h>
     2 #include <stdio.h>
     3 
     4 int main()
     5 {
     6    clock_t start_t, end_t, total_t;
     7    int i;
     8 
     9    start_t = clock();
    10    printf("程序启动,start_t = %ld
    ", start_t);
    11     
    12    printf("开始一个大循环,start_t = %ld
    ", start_t);
    13    for(i=0; i< 10000000; i++)
    14    {
    15    }
    16    end_t = clock();
    17    printf("大循环结束,end_t = %ld
    ", end_t);
    18    
    19    total_t = (double)(end_t - start_t) / CLOCKS_PER_SEC;
    20    printf("CPU 占用的总时间:%f
    ", total_t  );
    21    printf("程序退出...
    ");
    22 
    23    return(0);
    24 }

    2.2 时间和日期相关函数

      2.2.1 在标准C/C++中,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()为负。*/
      }; 
      #define _TM_DEFINED 
      #endif

      2.2.2 日历时间(Calendar Time)

      通过time_t数据类型来表示的,用time_t表示的时间(日历时间)是从一个时间点(例如:1970年1月1日0时0分0秒)到此时的秒数。在time.h中,我们也可以看到time_t是一个长整型数:

      #ifndef _TIME_T_DEFINED 
      typedef long time_t; /* 时间值 */ 
      #define _TIME_T_DEFINED /* 避免重复定义 time_t */ 
      #endif

      2.2.3 time.h头文件中的其他的一些函数

      double difftime(time_t time1, time_t time0); //返回以双精度浮点型 double 值表示的两个时间之间相差的秒数 (time2 - time1)。
      time_t mktime(struct tm * timeptr); //把 timeptr 所指向的结构转换为一个依据本地时区的 time_t 值,如果发生错误,则返回 -1 值。
      time_t time(time_t * timer); //返回自纪元 Epoch(1970-01-01 00:00:00 UTC)起经过的时间,以秒为单位。如果 seconds 不为空,则返回值也存储在变量 seconds 中。
      char * asctime(const struct tm * timeptr); //返回一个指向字符串的指针,它代表了结构 struct timeptr 的日期和时间。包含了可读格式的日期和时间信息 Www Mmm dd hh:mm:ss yyyy,其中,Www 表示星期几,Mmm 是以字母表示的月份,dd 表示一月中的第几天,hh:mm:ss 表示时间,yyyy 表示年份。
      char * ctime(const time_t *timer);//返回一个表示当地时间的字符串,当地时间是基于参数 timer。返回的字符串格式如下: Www Mmm dd hh:mm:ss yyyy 其中,Www 表示星期几,Mmm 是以字母表示的月份,dd 表示一月中的第几天,hh:mm:ss 表示时间,yyyy 表示年份。

      struct tm * gmtime(const time_t *timer); //使用 timer 的值来填充 tm 结构,并用协调世界时(UTC)也被称为格林尼治标准时间(GMT)表示。
      struct tm * localtime(const time_t * timer); //使用 timer 的值来填充 tm 结构。timer 的值被分解为 tm 结构,并用本地时区表示。

        size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr) ;//根据 format 中定义的格式化规则,格式化结构 timeptr 表示的时间,并把它存储在 str 中,最多向str中存放maxsize个字符。forexample: strftime(str,100,"It is now %I %p ",ptr); 

  • 相关阅读:
    FASM学习中的一些表格
    Win32汇编学习(7):鼠标输入消息
    Win32汇编学习(6):键盘输入消息
    Win32汇编学习(5):绘制文本2
    Win32汇编学习(4):绘制文本
    Win32汇编学习(3):简单的窗口
    怎样建立你自己的MASM导入库
    win32 汇编学习(2):消息框
    Win32汇编学习(1):基本概念
    win32汇编(ASM)学习资源
  • 原文地址:https://www.cnblogs.com/xiaofeiIDO/p/7239976.html
Copyright © 2011-2022 走看看