Как конвертировать миллисекунды в FILETIME в C++

У меня есть время в секундах (например, 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;
   }
Другие вопросы по тегам