1)、包含头文件
2)、定义两个变量:
time_t tt;
struct tm pTM;
3)、获取时间:
time(&tt);
4)、转换为本地时间:
localtime_s(&pTm, &tt);
5)、格式化显示时间:
sprintf(str, "时%d:分%d:秒%d", pTm.tm_hour, pTm.tm_min,pTm.tm_sec);
也可以采用以下方式格式化显示时间:
char timestr[100];
strftime(timestr, sizeof(timestr), "%H:%M:%S", &pTm);
程序示例如下:
#include "stdafx.h"
#include
#include
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
time_t ti_t;
struct tm s_tm;
time(&ti_t);
localtime_s(&s_tm, &ti_t);
char time_chr[64] = {0};
sprintf(time_chr, "%d-%d-%d %d:%d:%d", s_tm.tm_year+1900, s_tm.tm_mon+1, s_tm.tm_mday, s_tm.tm_hour, s_tm.tm_min, s_tm.tm_sec);
cout << time_chr << endl;
return 0;
}
之所以要对得到的时间进行处理,是因为struct tm的结构所决定的,struct tm的定义及元素属性如下所示:
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有关)*/
};
计算时间差可以参考如下所示示例:
#include
int _tmain(int argc, _TCHAR* argv[])
{
//计时操作
clock_t start = clock(); // 开始时间
//Do Something
clock_t end = clock(); // 结束时间
cout << ">>> 耗时: " << end - start << endl;
return 0;
}
通过这种方式可以获得毫秒级的时间差。
另一个获取毫秒级别的时间差的函数为GetTickCount()函数,该函数获取的是操作系统从启动到现在经历的时间,示例如下:
#include
#include
int _tmain(int argc, _TCHAR* argv[])
{
DWORD start = GetTickCount();
Sleep(1000);
DWORD end = GetTickCount();
double period = (double)(end - start);
getchar();
}
前面的通过clock()的方式只能获取毫秒级别的时间差,如果想获得微秒级别的该怎么办呢?可以使用QueryPerformanceCounter函数。QueryPerformanceCounter函数获取的直接是CPU的时间,能够精确到微秒级。程序示例如下:
#include
#include
int _tmain(int argc, _TCHAR* argv[])
{
LARGE_INTEGER nFreq;
LARGE_INTEGER t1;
LARGE_INTEGER t2;
double dt;
int i = 0;
int loop_i = 100;
QueryPerformanceFrequency(&nFreq);
QueryPerformanceCounter(&t2);
while(i < loop_i)
{
//Sleep(1);
QueryPerformanceCounter(&t1);
dt = (double)(t1.QuadPart - t2.QuadPart) / (double)nFreq.QuadPart;
t2 = t1;
printf(">>> Running Time:%lf ms\n", dt * 1000);
i++;
}
getchar();
}
该示例可以计算每一次while循环耗费多长时间;
需要注意的是,当在while循环中加入 Sleep(1);//休眠1ms ;计算出的时间差并不是1ms,而是15ms左右,这个是因为CPU时间片的关系,具体细节不在敖述。