30天 系统时间的差异
30 days Difference on SYSTEMTIME
我愿意问是否有人有一些好的算法(或方法)来检查两个 SYSTEMTIME 变量的差异是否为 30 天或更长时间?
谢谢
正如 SYSTEMTIME
上的 MSDN 页面所说,
建议您不要在
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
范围的整数文本之间执行运算时的默认值)。
我会将它们转换为FileTime
并从另一个中减去一个。
差异应该超过30*24*60*60*10^7
.
微软建议
- 将 SYSTEMTIME 结构转换为 FILETIME 结构(64 位值,表示自 1601 年 1 月 1 日 (UTC) 以来的 100 纳秒间隔数)
- 将结果复制到ULARGE_INTEGER并在此基础上执行正态整数运算
有用的可能是:
- 系统时间到文件时间(...)
相关文章:
- c++ 11 如何获取系统时间?
- 如何使用跨平台代码在C++中设置系统时间?
- 如何使用 CTIME/Chrono Libarey 将开始时间与系统时钟进行比较
- 将系统时间与变量进行比较 - C++
- 即使在多任务处理时,添加用户时间 + 系统时间(来自 shell 的时间命令)是否是一种可靠的措施?
- 系统时间从何而来?
- 对于同一任务,线程的等待时间在 0 到 30000 微秒之间系统地切换
- 测量 std::系统的实际执行时间(以 C++ 为单位)
- Qthread ::更改系统时间时睡眠不正常
- 如何在跨平台C++中以毫秒为单位获得系统启动/启动时间(它应该在Windows / IOS / Android / MA
- 查找系统调用需要多长时间的可能方法
- 在C++的主逻辑中接收真实/用户/系统时间
- 为什么在获取系统时间时在此处使用“atomic_signal_fence”
- 使用rdtsc计算系统时间
- 用C++设置windows系统时间
- 如何使用套接字编程获取系统日期和时间
- 最佳C 11测量嵌入式系统代码执行时间的方法
- 具有较低系统时间的C++时序方法
- 不取决于系统时间的时间
- 我如何在C 的毫秒内获得系统的时间