将time_t值转换为 FILETIME

C 运行时中包含的时间函数使用 time_t 类型来表示自 1970 年 1 月 1 日午夜以来经过的秒数。 以下示例将 time_t 值转换为 FILETIME

#include <windows.h>
#include <time.h>

void TimetToFileTime(time_t t, LPFILETIME pft)
{
    ULARGE_INTEGER time_value;
    time_value.QuadPart = (t * 10000000LL) + 116444736000000000LL;
    pft->dwLowDateTime = time_value.LowPart;
    pft->dwHighDateTime = time_value.HighPart;
}

获取 FILETIME 后,可以使用 FileTimeToSystemTime 函数将值转换为系统时间。

旧代码示例

上一部分中的代码示例适用于任何体系结构。 但是,如果针对 32 位体系结构生成并定义 _USE_32BIT_TIME_T,则 time_t 为 32 位值。 在这种情况下,可以选择改用以下代码示例。

#include <windows.h>
#include <time.h>

void TimetToFileTime(time_t t, LPFILETIME pft)
{
    LONGLONG time_value = Int32x32To64(t, 10000000) + 116444736000000000;
    pft->dwLowDateTime = (DWORD) time_value;
    pft->dwHighDateTime = time_value >> 32;
}