两个SYSTEMTIME变量之间的差异

difference between two SYSTEMTIME variable

本文关键字:之间 SYSTEMTIME 变量 两个      更新时间:2023-10-16

我想得到两个SYSTEMTIME变量之间的差异。我以前在这里看到有人问过这个问题,但他被告知要将两个SYSTEMTIME结构转换为FILETIME。还有别的方法可以得到差额吗?

SYSTEMTIME st;
GetSystemTime(&st);

——这里有些代码——

  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;
}

MSDN文档上说得很清楚:

不建议您在控件中添加和减去值SYSTEMTIME结构获取相对时间。相反,您应该

    将SYSTEMTIME结构转换为FILETIME结构。
  • 将结果FILETIME结构复制到一个ULARGE_INTEGER结构。
  • 对ULARGE_INTEGER值使用正常的64位算术。

为什么不这样做呢?

ft1和ft2是文件时间结构

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;

毫秒差…

ULARGE_INTEGER uliRetValue;
    uliRetValue.QuadPart = 0;

    uliRetValue = ul2;
    uliRetValue.QuadPart /= 10;
    uliRetValue.QuadPart /= 1000; // To Milliseconds