C++ 系统时间差30天
我想问一下,是否有人有一些好的算法(或方法)来检查两个SYSTEMTIME变量的差值是否为30天或更长 谢谢你我想从一个中减去另一个。C++ 系统时间差30天,c++,date,time,systemtime,C++,Date,Time,Systemtime,我想问一下,是否有人有一些好的算法(或方法)来检查两个SYSTEMTIME变量的差值是否为30天或更长 谢谢你我想从一个中减去另一个。 差异应该大于30*24*60*60*10^7,正如SYSTEMTIME上所说 不建议您从SYSTEMTIME结构中加减值以获得相对时间。相反,你应该 将SYSTEMTIME结构转换为FILETIME结构 将生成的FILETIME结构复制到ULARGE\u整数结构 对ULARGE\u整数值使用普通64位算法 SYSTEMTIME st1、st2; /* ...
差异应该大于
30*24*60*60*10^7
,正如SYSTEMTIME
上所说
不建议您从SYSTEMTIME
结构中加减值以获得相对时间。相反,你应该
- 将
结构转换为SYSTEMTIME
结构FILETIME
- 将生成的
结构复制到FILETIME
结构ULARGE\u整数
- 对
值使用普通64位算法ULARGE\u整数
SYSTEMTIME st1、st2;
/* ... */
文件时间ft1,ft2;
ULARGE_整数t1,t2;
乌龙龙溪;
SystemTimeToFileTime(&st1和&ft1);
SystemTimeToFileTime(&st2和&ft2);
memcpy(&t1,&ft1,sizeof(t1));
memcpy(&t2,&ft2,sizeof(t1));
差异=(t1.QuadPart(30*24*60*60)*(ULONGLONG)10000000)
{
...
}
(为了简洁起见,省略了对调用的错误处理)
关于(30*24*60*60)*(ULONGLONG)10000000
:30*24*60*60
是30天内的秒数10000000
是每秒的“滴答声”数(每个FILETIME
滴答声为100纳秒=10^2*10^-9秒=10^-7秒)。乘法中对其中一个操作数的强制转换是为了避免正则int
s溢出(在适合int
范围的整数文本之间执行操作时的默认值)。
- 将SYSTEMTIME结构转换为FILETIME结构()
- 将结果复制到一个ULARGE_整数,并在此基础上执行普通整数运算
30*24*60*60*10^7
数字吗?我只是想确保没有人弄错。@AllanJiang这是30天内100纳秒间隔的数字。有100纳秒的分辨率,你可以通过点击链接找到。我会非常小心地在基于C的语言中使用^,因为它是一个逻辑异或运算,而不是指数运算!这忽略了闰秒。
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)
{
...
}