如何将 FILETIME 转换为毫秒分辨率的 Unix EPOCH?

问题描述 投票:0回答:1

我想将 Windows FILETIME 结构转换为 Unix Epoch 格式,反之亦然。我需要写两个函数:

UINT64 GetEpoch(FILETIME ft)
{
  UINT64 llEpoch;
 //Code that converts ft to epoch
  return llEpoch;
}

FILETIME GetFileTime(UINT64 llEpoch)
{
  FILETIME ft;
  //Code that converts epoch to FILETIME
  return ft;
}

纪元值必须以毫秒为单位。我已经尝试过这篇文章

在 Unix/Linux 中将 Windows 文件时间转换为秒

我已经使用上面的文章编写了将 Epoch 转换为 FILETIME 的函数。看起来像这样:

#define MILI_SEC_TO_UNIX_EPOCH 116444736000000000LL

FILETIME CTimeUtils::MillisToFileTime(UINT64 millis)
{
    UINT64 multiplier = 10000;
    UINT64 t = (multiplier * millis) + MILI_SEC_TO_UNIX_EPOCH;

    ULARGE_INTEGER li;
    li.QuadPart = t;
    // NOTE, DON'T have to do this any longer because we're putting
    // in the 64bit UINT directly
    //li.LowPart = static_cast<DWORD>(t & 0xFFFFFFFF);
    //li.HighPart = static_cast<DWORD>(t >> 32);

    FILETIME ft;
    ft.dwLowDateTime = li.LowPart;
    ft.dwHighDateTime = li.HighPart;

    return ft;
}

但我还没弄清楚如何将 FILETIME 转换为毫秒分辨率的纪元。

visual-c++ time epoch
1个回答
0
投票

我知道这有点旧了。但这是转换。

GetSystemTimeAsFileTime(&fTime);
ULARGE_INTEGER ui;
ui.HighPart = fTime.dwHighDateTime;
ui.LowPart = fTime.dwLowDateTime;

long ms = (ui.QuadPart - 116444736000000000LL) / 10000000LL;
© www.soinside.com 2019 - 2024. All rights reserved.