SYSTEMTIME的30天差异

时间:2012-06-14 23:46:06

标签: c++ date time systemtime

我愿意问是否有人有一些好的算法(或方法)来检查两个SYSTEMTIME变量是否有30天或更长的差异?

谢谢

3 个答案:

答案 0 :(得分:7)

正如SYSTEMTIME上的MSDN page所说,

  

建议您不要在SYSTEMTIME结构中添加和减去值以获得相对时间。相反,你应该

     
      
  • SYSTEMTIME结构转换为FILETIME结构。
  •   
  • 将生成的FILETIME结构复制到ULARGE_INTEGER结构。
  •   
  • ULARGE_INTEGER值使用普通的64位算术。
  •   
SYSTEMTIME st1, st2;
/* ... */
FILETIME ft1, ft2;
ULARGE_INTEGER t1, t2;
ULONGLONG diff;
SystemTimeToFileTime(&st1, &ft1);
SystemTimeToFileTime(&st2, &ft2);
memcpy(&t1, &ft1, sizeof(t1));
memcpy(&t2, &ft2, sizeof(t1));
diff = (t1.QuadPart<t2.QuadPart)?(t2.QuadPart-t1.QuadPart):(t1.QuadPart-t2.QuadPart);
if(diff > (30*24*60*60)*(ULONGLONG)10000000)
{
    ...
}

(为简洁省略了对SystemTimeToFileTime的调用的错误处理)

关于(30*24*60*60)*(ULONGLONG)1000000030*24*60*60是30天内的秒数; 10000000是秒中FILETIME“滴答”的数量(每个FILETIME刻度为100 ns = 10 ^ 2 * 10 ^ -9 s = 10 ^ -7 s)。对乘法中的一个操作数的强制转换是为了避免溢出常规int s(在适合int范围的整数文字之间执行操作时的默认值)。

答案 1 :(得分:6)

我会convert them to FileTime并从另一个中减去一个 差异应该大于30*24*60*60*10^7

答案 2 :(得分:0)

microsoft advises to

有用的可能是: