Как я могу конвертировать FILETIME в секунды? Мне нужно сравнить два объекта FILETIME ..
я нашел этот,
но кажется, что это не сработает …
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 …
Это хороший способ извлечь количество секунд?
Код, который вы даете, кажется правильным, он преобразует FILETIME в метку времени UNIX (очевидно, теряет точность, поскольку теоретическое разрешение FILETIME составляет 100 наносекунд). Вы уверены, что сравниваемые ФИЛЬТРЫ имеют разницу всего в 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 года) с разрешением менее секунды.
Других решений пока нет …