All*_*ang 0 c++ time date systemtime
我愿意问一下是否有人有一些好的算法(或方法)来检查两个SYSTEMTIME变量是否有30天或更长的差异?
谢谢
正如MSDN页面上SYSTEMTIME所说,
建议您不要在
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)
{
...
}
Run Code Online (Sandbox Code Playgroud)
(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).对乘法中的一个操作数的强制转换是为了避免溢出常规ints(在执行符合范围的整数文字之间的操作时的默认值int).
| 归档时间: |
|
| 查看次数: |
2996 次 |
| 最近记录: |