0

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

谢谢

4

3 回答 3

7

正如MSDN 页面SYSTEMTIME所说,

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

  • SYSTEMTIME结构转换为FILETIME结构。
  • 将生成FILETIME的结构复制到ULARGE_INTEGER结构中。
  • 对值使用正常的 64 位算术ULARGE_INTEGER
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)10000000:30*24*60*60是 30 天的秒数;10000000FILETIME一秒内“滴答”的数量(每个FILETIME滴答为 100 ns=10^2*10^-9 s=10^-7 s)。对乘法中的一个操作数进行强制转换是为了避免溢出常规ints(在适合 a 范围的整数文字之间执行操作时的默认值int)。

于 2012-06-14T23:57:18.217 回答
6

会将它们转换为FileTime并从另一个中减去。
差值应大于30*24*60*60*10^7

于 2012-06-14T23:53:43.360 回答
0

微软建议_

有用的可能是:

于 2012-06-15T00:03:58.860 回答