代码如下,
double TimeDiff(const char* szTime1, const char* szTime2)
{
if(0 == szTime1) return -1.0f;
if(0 == szTime1[0]) return -1.0f;
if(0 == szTime2) return -1.0f;
if(0 == szTime2[0]) return -1.0f;
int nRetCount;
SYSTEMTIME sysTime1 = {0};
nRetCount = sscanf(szTime1, "%hd-%hd-%hd %hd:%hd:%hd.%hd",
&sysTime1.wYear, &sysTime1.wMonth, &sysTime1.wDay,
&sysTime1.wHour, &sysTime1.wMinute, &sysTime1.wSecond, &sysTime1.wMilliseconds);
if(7 != nRetCount)
{
return -1.0f;
}
SYSTEMTIME sysTime2 = {0};
nRetCount = sscanf(szTime2, "%hd-%hd-%hd %hd:%hd:%hd.%hd",
&sysTime2.wYear, &sysTime2.wMonth, &sysTime2.wDay,
&sysTime2.wHour, &sysTime2.wMinute, &sysTime2.wSecond, &sysTime2.wMilliseconds);
if(7 != nRetCount)
{
return -1.0f;
}
//将时间转换为FILETIME,然后拷贝到ULARGE_INTEGER中,再进行数学运算
FILETIME fileTime1 = {0}, fileTime2 = {0};
::SystemTimeToFileTime(&sysTime1, &fileTime1);
::SystemTimeToFileTime(&sysTime2, &fileTime2);
ULARGE_INTEGER uliTime1= {0}, uliTime2 = {0};
memcpy(&uliTime1, &fileTime1, sizeof(FILETIME));
memcpy(&uliTime2, &fileTime2, sizeof(FILETIME));
//计算毫秒结果
__int64 iSpan = ((__int64)(uliTime1.QuadPart - uliTime2.QuadPart))/10000;
if(0 == iSpan)
{
return 0.0f;
}
return iSpan/(24.0f*3600.0f*1000.0f);
}
之前用过COleDateTime类,但是精度不够。
FILETIME的精度为100纳秒,除以10000时得到毫秒的结果,除以10时得微秒结果。