在SYSTEMTIME30天差异(30 days Difference on SYSTEMTIME)

2019-09-18 03:22发布

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

谢谢

Answer 1:

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



Answer 2:

由于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)1000000030*24*60*60是的在30天后的秒数; 10000000是数量FILETIME “滴答”中的第二(每个FILETIME蜱为100ns = 10 ^ 2 * 10 ^ -9秒= 10 ^ -7 S)。 铸造到在乘法操作数之一是避免溢出定期int (执行适合的范围内整数常量之间的操作时默认S int )。



Answer 3:

微软建议到

  • 的SYSTEMTIME结构转换为FILETIME结构( 64位值,表示自1601年1月1 100纳秒间隔的数量(UTC) )
  • 结果复制到一个ULARGE_INTEGER和最重要的是进行正常的整数运算

有用的可能是:

  • SystemTimeToFileTime(...)


文章来源: 30 days Difference on SYSTEMTIME