取得两个 FILETIME 的时间差

如果为SYSTEMTIME,可以通过SystemTimeToFileTime先转到FILETIME

  1. #define NOMINMAX   
  2.   
  3. #include <algorithm>   
  4. #include <windows.h>   
  5.    
  6. SYSTEMTIME systemtime_difference(SYSTEMTIME const& st1, SYSTEMTIME const& st2)   
  7. {   
  8.     FILETIME ft1;   
  9.     SystemTimeToFileTime(&st1, &ft1);   
  10.     ULARGE_INTEGER const u1 = { ft1.dwLowDateTime, ft1.dwHighDateTime };   
  11.    
  12.     FILETIME ft2;   
  13.     SystemTimeToFileTime(&st2, &ft2);   
  14.     ULARGE_INTEGER const u2 = { ft2.dwLowDateTime, ft2.dwHighDateTime };   
  15.    
  16.     ULARGE_INTEGER u3;   
  17.     u3.QuadPart = std::max(u1.QuadPart, u2.QuadPart) - std::min(u1.QuadPart, u2.QuadPart);   
  18.     FILETIME const ft3 = { u3.LowPart, u3.HighPart };   
  19.    
  20.     SYSTEMTIME st3;   
  21.     FileTimeToSystemTime(&ft3, &st3);   
  22.     // FILETIME's starting point is 1601-01-01   
  23.     st3.wYear -= 1601;   
  24.     st3.wMonth -= 1;   
  25.     st3.wDay -= 1;   
  26.     st3.wDayOfWeek = 0; // useless for this purpose, make it always 0 so it's always ignored   
  27.     return st3;   
  28. }   
  29.    
  30. int main()   
  31. {   
  32.     SYSTEMTIME const st1 = { 2008, 10, 3, 15, 6, 5, 31, 12 };   
  33.     SYSTEMTIME const st2 = { 2009, 12, 0, 27, 10, 7, 59, 56 };   
  34.     SYSTEMTIME st3 = systemtime_difference(st1, st2);   
  35.    
  36.     return 0;   
  37. }   
#define NOMINMAX 

#include <algorithm> 
#include <windows.h> 
 
SYSTEMTIME systemtime_difference(SYSTEMTIME const& st1, SYSTEMTIME const& st2) 
{ 
    FILETIME ft1; 
    SystemTimeToFileTime(&st1, &ft1); 
    ULARGE_INTEGER const u1 = { ft1.dwLowDateTime, ft1.dwHighDateTime }; 
 
    FILETIME ft2; 
    SystemTimeToFileTime(&st2, &ft2); 
    ULARGE_INTEGER const u2 = { ft2.dwLowDateTime, ft2.dwHighDateTime }; 
 
    ULARGE_INTEGER u3; 
    u3.QuadPart = std::max(u1.QuadPart, u2.QuadPart) - std::min(u1.QuadPart, u2.QuadPart); 
    FILETIME const ft3 = { u3.LowPart, u3.HighPart }; 
 
    SYSTEMTIME st3; 
    FileTimeToSystemTime(&ft3, &st3); 
    // FILETIME's starting point is 1601-01-01 
    st3.wYear -= 1601; 
    st3.wMonth -= 1; 
    st3.wDay -= 1; 
    st3.wDayOfWeek = 0; // useless for this purpose, make it always 0 so it's always ignored 
    return st3; 
} 
 
int main() 
{ 
    SYSTEMTIME const st1 = { 2008, 10, 3, 15, 6, 5, 31, 12 }; 
    SYSTEMTIME const st2 = { 2009, 12, 0, 27, 10, 7, 59, 56 }; 
    SYSTEMTIME st3 = systemtime_difference(st1, st2); 
 
    return 0; 
} 

 

感谢:http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/fe975619-5e19-45e0-82cd-797ff7745712

posted on 2013-08-20 16:55  唸安。  阅读(990)  评论(0)    收藏  举报