Windows — C ++ \ Конвертировать FILETIME в секунды

Как я могу конвертировать 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 …
Это хороший способ извлечь количество секунд?

3

Решение

Код, который вы даете, кажется правильным, он преобразует 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 года) с разрешением менее секунды.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]