如何将FILETIME转换为秒?我需要比较两个FILETIME对象..
我找到了this, 但似乎它没有做到这一点......
ULARGE_INTEGER ull;
ull.LowPart = lastWriteTimeLow1;
ull.HighPart = lastWriteTimeHigh1;
time_t lastModified = ull.QuadPart / 10000000ULL - 11644473600ULL;
ULARGE_INTEGER xxx;
xxx.LowPart = currentTimeLow1;
xxx.HighPart = currentTimeHigh1;
time_t current = xxx.QuadPart / 10000000ULL - 11644473600ULL;
unsigned long SecondsInterval = current - lastModified;
if (SecondsInterval > RequiredSecondsFromNow)
return true;
return false;
我比较了2个FILETIME和预期的10秒差异,它给了我~7000 ... 这是提取秒数的好方法吗?
答案 0 :(得分:4)
您提供的代码似乎是正确的,它将FILETIME转换为UNIX时间戳(显然会失去精度,因为FILETIME的理论分辨率为100纳秒)。你确定你比较的FILETIME确实只有10秒的差异吗?
我实际上在某些软件中使用了非常相似的代码:
double time_d()
{
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
__int64* val = (__int64*) &ft;
return static_cast<double>(*val) / 10000000.0 - 11644473600.0; // epoch is Jan. 1, 1601: 134774 days to Jan. 1, 1970
}
这将返回类似UNIX的时间戳(自1970年以来的秒数),具有亚秒级分辨率。
答案 1 :(得分:0)
为了比较
double toSeconds(const FILETIME& t)
{
return LARGE_INTEGER{t.dwLowDateTime, (long)t.dwHighDateTime}.QuadPart * 1e-7;
}
是最简单的。