时间类型:SYSTMETIME、FILETIME、DosTime
1.SYSTEMTIME直接记录年月日时分秒和毫秒,还有星期几,结构如下,无需解释:
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
2.FILETIME 按毫秒计算的win32时间,也就是每过1ms dwLowDateTime就累加1,加满了就给dwHighDateTime进一位。
typedef struct _FILETIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME, *PFILETIME, *LPFILETIME;
3.DosTime
WORD wFatDate, wFatTime; //两个16位的数
wFatDate0-4位是日,5-8位是月,8-15位是年
wFatTime0-4位是秒,5-10位是分,11-15位是时
获得时间的方法:
void GetSystemTime(LPSYSTEMTIME lpSystemTime); //用该方法获得的时间是格林威治时间(UTC时间),而不是当前计算机右下角的时间。
void GetLocalTime(LPSYSTEMTIME lpSystemTime); //该方法获得的是本地时间。
void GetSystemTimeAsFileTime(LPFILETIME lpFileTime); //该方法或的的也是格林威治时间。
GetThreadTimes(): //获得线程时间,就不注解了
DWORD GetTickCount(void); //这是获得机器启动后的计时时间,也是按毫秒计时的。
时间格式转换:
BOOL SystemTimeToFileTime(const SYSTEMTIME *lpSystemTime, LPFILETIME lpFileTime);
BOOL FileTimeToSystemTime(const FILETIME *lpFileTime, LPSYSTEMTIME lpSystemTime);
BOOL FileTimeToDosDateTime(const FILETIME *lpFileTime, LPWORD lpFatDate, LPWORD lpFatTime);
BOOL DosDateTimeToFileTime(LPWORD lpFatDate, LPWORD lpFatTime, LPFILETIME lpFileTime);
INT SystemTimeToVariantTime(LPSYSTEMTIME *lpSystemTime, DOUBLE *pvtime); //就是将时间转换成一个double值。
VariantTimeToSystemTime(); //转回来不解释。
DosDateTimeToVariantTime();
VariantTimeToDosDateTime();//类似SystemTime的转换
时区的转换:
BOOL FileTimeToLocalFileTime(const FILETIME *lpFileTime ,LPFILETIME lpLocalFileTime); //将格林威治的'FILETIME'转换成本地'FILETIME'。
BOOL LocalFileTimeToFileTime(); //本地时间转化成格林威治时间
BOOL SystemTimeToTzSpecificLocalTime(const TIME_ZONE_INFORMATION *lpTimeZoneInformation, const SYSTEMTIME *lpUniversalTime, LPSYSTEMTIME lpLocalTime); //
时区结构:
typedef struct _TIME_ZONE_INFORMATION {
LONG Bias;
WCHAR StandardName[ 32 ];
SYSTEMTIME StandardDate;
LONG StandardBias;
WCHAR DaylightName[ 32 ];
SYSTEMTIME DaylightDate;
LONG DaylightBias;
} TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION, *LPTIME_ZONE_INFORMATION;
获取和设置时区信息:
DWORD GetTimeZoneInformation(LPTIME_ZONE_INFORMATION lpTimeZoneInformation);
BOOL SetTimeZoneInformation(const LPTIME_ZONE_INFORMATION lpTimeZoneInformation);