1.clock(),其相关的数据类型是clock_t
这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数。
在time.h文件中,我们可以找到对它的定义:
#ifndef _CLOCK_T_DEFINED
typedef long clock_t;
#define _CLOCK_T_DEFINED
#endif
计算一个进程自身的运行时间:
void elapsed_time()
{
printf("Elapsed time:%u secs.\n",clock()/CLOCKS_PER_SEC);
运行一个循环或者处理其它事件到底花了多少时间:
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 );
2.通过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()为负。*/
};
#define _TM_DEFINED
#endif
3.日历时间(Calendar Time)是通过time_t数据类型来表示
从一个时间点(例如:1970年1月1日0时0分0秒)到此时的秒数
不能晚于2038年1月18日19时14分07秒
time_t lt;
lt =time(NUL); //从1970年1月1日0时0分0秒到此时的秒数
4.秒数转为年月日
struct tm *local
local=localtime(&t); //当地时间,UTC+8(北京时间)
local=gmtime(&t); //世界标准时间 UTC
5.自定义时间格式
使用strftime()函数将时间格式化为我们想要的格式--strftime
//std::string sTime = sysInfoEvent.msgEvent.event_log_id();
//time_t tt= atoi(sTime.c_str());
//char buff[128];
//strftime(buff, sizeof(buff), "%Y-%m-%d %H:%M:%S", localtime(&tt));
//sTime = buff;
//std::stringstream sstest;
//sstest<<time(NULL);
//std::string sLogID = sstest.str();
6.年月日转为秒
time_t mktime(struct tm * timeptr);
struct tm t;
time_t t_of_day;
t.tm_year=1997-1900;
t.tm_mon=6;
t.tm_mday=1;
t.tm_hour=0;
t.tm_min=0;
t.tm_sec=1;
t.tm_isdst=0;
t_of_day=mktime(&t);
printf(ctime(&t_of_day));