1

我有几秒钟的时间(例如: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 。使用在线转换器时,我得到了同样的结果。

知道如何解决这个问题吗?

我已经看到了一些使用 boost 的答案,但它在我的项目中可用。

4

1 回答 1

3

这是关于添加 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;
   }
于 2017-09-13T15:52:38.823 回答