I want to get difference between two SYSTEMTIME variable. I saw someone asked this question here before, but he was told to convert both SYSTEMTIME structures to FILETIME.. Is there another way to get the difference?
SYSTEMTIME st;
GetSystemTime(&st);
---some code here---
SYSTEMTIME st2;
GetSystemTime(&st2);
st-st2?
SYSTEMTIME operator-(const SYSTEMTIME& pSr,const SYSTEMTIME& pSl)
{
SYSTEMTIME t_res;
FILETIME v_ftime;
ULARGE_INTEGER v_ui;
__int64 v_right,v_left,v_res;
SystemTimeToFileTime(&pSr,&v_ftime);
v_ui.LowPart=v_ftime.dwLowDateTime;
v_ui.HighPart=v_ftime.dwHighDateTime;
v_right=v_ui.QuadPart;
SystemTimeToFileTime(&pSl,&v_ftime);
v_ui.LowPart=v_ftime.dwLowDateTime;
v_ui.HighPart=v_ftime.dwHighDateTime;
v_left=v_ui.QuadPart;
v_res=v_right-v_left;
v_ui.QuadPart=v_res;
v_ftime.dwLowDateTime=v_ui.LowPart;
v_ftime.dwHighDateTime=v_ui.HighPart;
FileTimeToSystemTime(&v_ftime,&t_res);
return t_res;
}
It says pretty clearly on the MSDN documentation:
It is not recommended that you add and subtract values from the SYSTEMTIME structure to obtain relative times. Instead, you should
- Convert the SYSTEMTIME structure to a FILETIME structure.
- Copy the resulting FILETIME structure to a ULARGE_INTEGER structure.
- Use normal 64-bit arithmetic on the ULARGE_INTEGER value.
Why not do exactly that?
ft1 and ft2 are filetime structures
ULARGE_INTEGER ul1;
ul1.LowPart = ft1.dwLowDateTime;
ul1.HighPart = ft1.dwHighDateTime;
ULARGE_INTEGER ul2;
ul2.LowPart = ft2.dwLowDateTime;
ul2.HighPart = ft2.dwHighDateTime;
ul2.QuadPart -= ul1.QuadPart;
Difference in Milliseconds...
ULARGE_INTEGER uliRetValue;
uliRetValue.QuadPart = 0;
uliRetValue = ul2;
uliRetValue.QuadPart /= 10;
uliRetValue.QuadPart /= 1000; // To Milliseconds
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With