我愿意问是否有人有一些好的算法(或方法)来检查两个 SYSTEMTIME 变量是否有 30 天或更长时间的差异?
谢谢
正如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 天的秒数;10000000
是FILETIME
一秒内“滴答”的数量(每个FILETIME
滴答为 100 ns=10^2*10^-9 s=10^-7 s)。对乘法中的一个操作数进行强制转换是为了避免溢出常规int
s(在适合 a 范围的整数文字之间执行操作时的默认值int
)。
我会将它们转换为FileTime
并从另一个中减去。
差值应大于30*24*60*60*10^7
。
微软建议_
有用的可能是: