У меня есть время в секундах (например, 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. Я получаю то же самое при использовании онлайн-конвертеров.
Есть идеи, как это решить?
Я видел некоторые ответы, используя повышение, но оно доступно в моем проекте.
Речь идет о добавлении 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;
}
Других решений пока нет …