• C/C++常用的时间函数


    1 time()

    头文件:time.h

    函数原型:time_t time(time_t * timer)

    功能: 获取当前的系统时间,返回的结果是一个time_t类型,其实就是一个大整数(long),其值表示从CUT

    (Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的数。然后调用localtime将time_t所表示的CUT时间转换为本地时间(我们是+8区,比CUT多8个小时)并转成

    struct tm类型,该类型的各数据成员分别表示年月日时分秒。

    举例:

    //获取当前时间

    time_t nowtime;
    struct tm *timeinfo;
    time( &nowtime );//或者nowtime=time(NULL);
    timeinfo = localtime( &nowtime );
    
    int year, month, day;
    year = timeinfo->tm_year + 1900;
    month = timeinfo->tm_mon + 1;
    day = timeinfo->tm_mday;
    printf("%d :%d :%d\n", year, month, day);
    
    char timE [80];
    
    strftime ( timE,80,"Data:\n%Y-%m-%d \nTime:\n%I:%M:%S\n",timeinfo);
    
    printf ("%s\n", timE);

    说明: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-11输出时要加1
    int tm_year; //自1900到当前的年数
    int tm_wday; //自星期日的天数0-6
    int tm_yday; //自1月1日起的天数,0-365
    int tm_isdst;//是否采用夏时制,采用为正数
    } ;
    strftime()函数将时间格式化为我们想要的格式,原型如下:

    size_t strftime(

     

      char *strDest,

     

      size_t maxsize,

     

      const char *format,

     

      const struct tm *timeptr

     

      );

    格式命令列在下面,它们是区分大小写的

        %a 星期几的简写 Eg:Tue

     

      %A 星期几的全称 Eg: Tuesday

     

      %b 月分的简写

     

      %B 月份的全称

     

      %c 标准的日期的时间串

     

      %C 年份的后两位数字

     

      %d 十进制表示的每月的第几天 (范围为 00 至 31)。

     

      %D 月/天/年

     

      %e 在两字符域中,十进制表示的每月的第几天

     

      %F 年-月-日

     

      %g 年份的后两位数字,使用基于周的年

     

      %G 年分,使用基于周的年

     

      %h 简写的月份名

     

      %H 24小时制的小时(范围为 00 至 23)。 

     

      %I 12小时制的小时  (范围为 01 至 12)。

     

      %j 十进制表示的每年的第几天  (范围为 001 至 366)。

     

      %m 十进制表示的月份

     

      %M 十时制表示的分钟数

     

      %n 新行符

     

      %p 本地的AM或PM的等价显示

     

      %r 12小时的时间

     

      %R 显示小时和分钟:hh:mm

     

      %S 十进制的秒数

     

      %t 水平制表符

     

      %T 显示时分秒:hh:mm:ss

     

      %u 每周的第几天,星期一为第一天 (值从0到6,星期一为0)

     

      %U 第年的第几周,把星期日作为第一天(值从0到53)

     

      %V 每年的第几周,使用基于周的年

     

      %w 十进制表示的星期几(值从0到6,星期天为0)

     

      %W 每年的第几周,把星期一做为第一天(值从0到53)

     

      %x 标准的日期串

     

      %X 标准的时间串

     

      %y 不带世纪的十进制年份(值从0到99)

     

      %Y 带世纪部分的十制年份

     

      %z,%Z 时区名称,如果不能得到时区名称则返回空字符。

     

      %% 百分号

    2 clock()

    头文件:time.h

    函数原型:clock_t clock(void);  clock_t其实就是long,即长整形

    功能:函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数。常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元,vc6.0和c++builder6.0中该常量是1000,因此一个计时单元是1毫秒。

    举例:

     long i = 10000000L;
     clock_t start, finish;
     double duration;  //测量一个事件持续的时间
     printf( "Time to do %ld empty loops is ", i );
     start = clock();
     while( i-- ) ;
     finish = clock();
     duration = (double)(finish - start)/ CLOCKS_PER_SEC;
     printf( "%f seconds\n", duration );

    WINDOWS API

    3 GetTickCount

    库文件:kernl32.dll

    头文件:C/C++头文件winbase.h ;windows程序设计中可以使用头文件windows.h

    函数原型:DWORD GetTickCount(void);

    功能:返回从操作系统启动到现在所经过的毫秒数,它的返回值是DWORD

    举例:

    DWORD dwStart = GetTickCount();
    //这里运行你的程序代码
    DWORD dwEnd = GetTickCount();
    则(dwEnd-dwStart)就是你的程序运行时间, 以毫秒为单位
    这个函数只精确到55ms,1个tick就是55ms。

    4 timeGetTime 

    库文件:winmm.lib,引用该库文件#pragma    comment(lib,"winmm.lib")

    函数原型:DWORD timeGetTime(VOID);

    功能:返回从操作系统启动到现在所经过的毫秒数,它的返回值是DWORD,精确度比GetTickCount高(>=5ms)

    举例:

     #pragma    comment(lib,"winmm.lib")
    
     j=10000000;
     DWORD dwStart1 = timeGetTime();
     while(j--);
     DWORD dwEnd1 = timeGetTime();
     cout<<(dwEnd1-dwStart1)<<endl;

    5 GetLocalTime

    头文件:windows.h

    函数原型:VOID GetLocalTime(

      LPSYSTEMTIME lpSystemTime       //address of system times structure

      );

    lpSystemTime: 指向一个用户自定义包含日期和时间信息的类型为 SYSTEMTIME 的变量,该变量用来保存函数获取的时间信息

    功能:获取当地的当前系统日期和时间

    SYSTEMTIME结构体

      typedef struct _SYSTEMTIME

      {

      WORD wYear;//年

      WORD wMonth;//月

      WORD wDayOfWeek;//星期,0为星期日,1为星期一,2为星期二……

      WORD wDay;//日

      WORD wHour;//时

      WORD wMinute;//分

      WORD wSecond;//秒

      WORD wMilliseconds;//毫秒

      }SYSTEMTIME,*PSYSTEMTIME;

    举例:

    SYSTEMTIME time;
     GetLocalTime(&time);
     printf("当前时间为:-:-:-\n",time.wHour,time.wMinute,time.wSecond);

    6 QueryPerformanceCounter

    头文件:windows.h

    函数原型:BOOL QueryPerformanceCounter(LARGE_INTEGER *ipPerformanceCount);//参数指向计数器的值,如果安装的硬件不支持高精度计时器,该参数将返回0

    函数返回值:硬件不支持高精度计时器,函数返回0,否则返回非0

    功能:得到高精度计时器的值(如果存在这样的计时器),精度可以达到微秒级别

    辅助函数QueryPerformanceFrequency

    函数原型:BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);

    函数返回值:硬件不支持高精度计时器,函数返回0,否则返回非0

    功能:返回硬件支持的高精度计数器的频率(每秒嘀哒声的个数)

    typeef union _ LARGE_INTEGER
      {
       struct
       {
       DWORD LowPart;
       LONG HighPart;
       };
       LONGLONG QuadPart;
      } LARGE_INTEGER;

    举例:

     

    j=100000;
     LARGE_INTEGER litmp;
     LONGLONG qt1,qt2;
     double dft,dff,dfm;
     QueryPerformanceFrequency(&litmp);//获得时钟频率
     dff=(double)litmp.QuadPart;
     QueryPerformanceCounter(&litmp);//获得初始值
     qt1=litmp.QuadPart;
     while(j--);
     QueryPerformanceCounter(&litmp);//获得终止值
     qt2=litmp.QuadPart;
     dfm=(double)(qt2-qt1);
     dft=dfm*1000000/dff;//获得对应的时间值,微秒为单位
     cout<<dft<<endl;

     【版权声明】转载请注明出处 http://www.cnblogs.com/TenosDoIt/archive/2013/04/15/3022021.html

  • 相关阅读:
    Linux 使用crontab定时备份Mysql数据库
    pdf.js 文字丢失问题 .cmaps
    indexOf IE8下的兼容
    Huplaodfiy---图片文件上传插件修改
    dateTimePicker日期时间插件-----限定节假日调休的可选择性
    【转】MyEclipse第一个Servlet程序
    input 的 placeholder属性在IE8下的兼容处理
    zepto的scrollTo,实现锚点跳转
    微信小程序
    mac 终端中添加tree命令显示文件目录结构
  • 原文地址:https://www.cnblogs.com/TenosDoIt/p/3022021.html
Copyright © 2020-2023  润新知