c++ - 如何在 C++ 中将毫秒时间转换为 FILETIME

标签 c++ time epoch 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 。我在使用在线转换器时也遇到了同样的情况。

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

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

最佳答案

关于加116444736000000000,见How To Convert a UNIX time_t to a Win32 FILETIME or 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;
   }

关于c++ - 如何在 C++ 中将毫秒时间转换为 FILETIME,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46201834/

相关文章:

1970 年格式化之前的 Perl 纪元时间

c++ - 使用 freopen 或 fopen CPP 时 Eclipse 无法读取文件

c++ - Win8 的拼写检查 API 将 null 作为输出参数发送

c - 以微秒为单位获取 C 中的时间戳?

python - 添加两个小时的python

mysql - 为什么我们不使用完整的 32 位来存储自纪元以来的 136 年呢?

c++ - std::ifstream 因某种原因关闭?

c++ - 如何解析表示树状数据结构的字符串

java - 不使用 java.util.Date 的 Java 中的纳秒级时间

c++ - 单元测试 : How to test a method returning current time