我愿意询问是否有人有一些很好的算法(或方法)检查两个SYSTEMTIME变量为30天或更长的差异?
谢谢
我愿意询问是否有人有一些很好的算法(或方法)检查两个SYSTEMTIME变量为30天或更长的差异?
谢谢
我将它们转换为FileTime
和一个。减去从另一个。
差应大于30*24*60*60*10^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天后的秒数; 10000000
是数量FILETIME
“滴答”中的第二(每个FILETIME
蜱为100ns = 10 ^ 2 * 10 ^ -9秒= 10 ^ -7 S)。 铸造到在乘法操作数之一是避免溢出定期int
(执行适合的范围内整数常量之间的操作时默认S int
)。
微软建议到
有用的可能是: