Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 系统时间差30天_C++_Date_Time_Systemtime - Fatal编程技术网

C++ 系统时间差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; /* ...

我想问一下,是否有人有一些好的算法(或方法)来检查两个SYSTEMTIME变量的差值是否为30天或更长

谢谢你

我想从一个中减去另一个。
差异应该大于
30*24*60*60*10^7

,正如
SYSTEMTIME
上所说

不建议您从
SYSTEMTIME
结构中加减值以获得相对时间。相反,你应该

  • SYSTEMTIME
    结构转换为
    FILETIME
    结构
  • 将生成的
    FILETIME
    结构复制到
    ULARGE\u整数
    结构
  • ULARGE\u整数
    值使用普通64位算法
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_整数,并在此基础上执行普通整数运算
有用的方法可以是:


我可能会将两者转换为FILETIME,并以这种方式进行比较。你可以使用SystemTimeToFileTime函数来做这件事,然后只做数学运算。谢谢,但是你能花一点时间解释一下
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)
{
    ...
}