Как преобразовать время в миллисекундах в FILETIME в переполнении стека

У меня есть время в секундах (например, 1505306792).

Как конвертировать это в FILETIME?

Вот код, который я пробовал

    INT64 timer64 = 1505306792;

timer64 = timer64 *1000 *10000;

ULONGLONG xx = timer64;

FILETIME fileTime;
ULARGE_INTEGER uliTime;

uliTime.QuadPart = xx;
fileTime.dwHighDateTime = uliTime.HighPart;
fileTime.dwLowDateTime = uliTime.LowPart;

Этот результат FILETIME прибывает как 1648-09-13 15:34:00

Я ожидаю, что эта дата будет 2017-09-13 12:46:31. Я получаю то же самое при использовании онлайн-конвертеров.

Есть идеи, как это решить?

Я видел некоторые ответы, используя повышение, но оно доступно в моем проекте.

1

Решение

Речь идет о добавлении 116444736000000000, см. Как конвертировать UNIX time_t в Win32 FILETIME или SYSTEMTIME:

   #include <winbase.h>
#include <winnt.h>
#include <time.h>

void UnixTimeToFileTime(time_t t, LPFILETIME pft)
{
// Note that LONGLONG is a 64-bit value
LONGLONG ll;

ll = Int32x32To64(t, 10000000) + 116444736000000000;
pft->dwLowDateTime = (DWORD)ll;
pft->dwHighDateTime = ll >> 32;
}
3

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

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

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