2 Windows API函数
通过Windows API的GetLocalTime()函数获取当前系统时间。
2.1 函数格式
void WINAPI GetLocalTime(
__out LPSYSTEMTIME LpSystemTime
);
其中,参数LpSystemTime是SYSTEMTIME结构的指针,用于保存获取到的时间。
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME;
从以上定义可以看出,SYSTEMTIME不仅包含年月日时分秒,还包含更小的毫秒单位。
2.2 相关代码
通过GetLocalTime()函数获取当前系统时间的代码如下所示:
SYSTEMTIME st;
GetLocalTime(&st);
printf("%d-%02d-%02d %02d:%02d:%02d:%03d",
st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
图2 获取当前系统时间
2.3 GetLocalTime()与GetSystemTime()的区别
GetSystemTime()的使用方法与GetLocalTime()函数相同。区别在于,GetLocalTime()获取到的时间是本机时间,而GetSystemTime()获取到的时间是格林尼治时间。如图3所示。
图3 两个函数获取到的系统时间
从图3可以看出,通过两个函数获取到的时间相差8个小时。
需要注意的是,在使用Windows API函数时,需要包含Windows.h头文件。
3 C++11新功能
在C++11中,使用std::chrono库中的system_clock类来获取当前系统时间。
3.1 获取当前系统时间
system_clock类表示了系统范围内的实时挂钟。相关代码如下所示:
auto start = chrono::system_clock::now();
time_t start_time = chrono::system_clock::to_time_t(start);
printf("%s\n", ctime(&start_time));
其中,now()函数得到类型为
chrono::time_point<std::chrono::system_clock>的返回值start;to_time_t()函数是system_clock类的静态函数,将now()函数的返回值转换为time_t类型的对象start_time;最后,通过转换后的start_time构造一个ctime类的对象,并打印出来,如图4所示。
图4 获取当前系统时间
3.2 获取时间间隔
还通过system_clock类的now()函数获取时间间隔。代码如下所示
auto start = std::chrono::system_clock::now();
printf("打印信息所需的时间是:\n");
auto end = std::chrono::system_clock::now();
chrono::duration<double> elapsed_seconds = end - start;
printf("%lf秒.\n", elapsed_seconds.count());
通过now()函数获取打印信息前后的系统时间start和end,计算出打印信息所需的时间。
其效果如图5所示。
图5 获取时间间隔