Windows时间的获取和设置:
在Win32编程中,常用的获取系统时间的函数是有两个,即GetLocalTime和GetSystemTime:
void WINAPI GetLocalTime(
__out LPSYSTEMTIME lpSystemTime
);
void WINAPI GetSystemTime(
__out LPSYSTEMTIME lpSystemTime
);
这两个函数的区别是GetLocalTime返回当前的时间,而GetSystemTime返回当前的格林威治时间,这两个函数把返回的时间信息放在了lpSystemTime参数中。

SYSTEMTIME结构定义如下:
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek; //星期
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME;

相应地,设置系统时间的函数分别是:
BOOL WINAPI SetLocalTime(
__in const SYSTEMTIME *lpSystemTime
);
BOOL WINAPI SetSystemTime(
__in const SYSTEMTIME *lpSystemTime
);

代码实例如下:
#include <windows.h>
#include <stdio.h>

void main()
{
SYSTEMTIME st, lt;

GetSystemTime(&st);
GetLocalTime(<);

printf("The system time is: %02d:%02d/n", st.wHour, st.wMinute);
printf(" The local time is: %02d:%02d/n", lt.wHour, lt.wMinute);
}


计算时间间隔:
时间戳函数GetTickCount用来返回Windows本次启动以来的ms数:
DWORD WINAPI GetTickCount(void);
由于函数返回的是一个32位数,可以表示的范围是1~0xffffffff ms,所以当Windows连续运行49.7天后,计数器会清零并重新开始。该函数主要用来计算两个时间点的间隔,在WindowsNT/2000/XP系统下,函数的精度是10ms。

为了得到更精确的时间间隔值,我们可以使用Windows高精度时间戳函数。Windows在内部维护了一个高精度的计时器,计时的精度取决于计算机的硬件速度。

用QueryPerformanceFrequency函数可以获取该计时器每秒钟的计数值:
BOOL WINAPI QueryPerformanceFrequency(
__out LARGE_INTEGER *lpFrequency //64位计数值
);
根据函数返回的计数值lpFrequency,可以算出计时器的精度为1 000 000/lpFrequency 微秒。

QueryPerformanceCounter函数可用来获取高精度计时器的计数值:
BOOL WINAPI QueryPerformanceCounter(
__out LARGE_INTEGER *lpPerformanceCount
);
当两次调用该函数得到的计数值是X1和X2,而每秒计数值(调用QueryPerformanceFrequency得到的)为Y时,则时间间隔就是:
(X2-X1)*1 000 000/Y (微秒)。



相关文章可见:《WindowsAPI巡礼》---GetSystemTime和GetFileTime​​​​