我愿意问是否有人有一些好的算法(或方法)来检查两个SYSTEMTIME变量是否有30天或更长的差异?
谢谢
答案 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)10000000
:30*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
有用的可能是: