在 UNIX 平台下名为 time_t',表示 1970 年 1 月 1,UTC (协调通用时间) 午夜以来经过的秒数是 ANSI C 运行库算术类型的窗体中维护文件的时间。
在 Win32 平台下主要中表示的数自 1601 年 1 月 1,UTC 以来的 100 个十亿分之一秒间隔 (坐标通用时间) 一个 64 位 FILETIME 结构的形式维护文件的时间。
本文说明如何将 UNIX 时间转换为其他 Win32 时间格式。
下面的函数将一个 filetime UNIX time_t 格式转换为 Win32 FILETIME 格式。注意 time_t 是一个 32 位的值,FILETIME 是一个 64 位结构,因此,在下面的函数中使用 Win32 功能 Int32x32To64():
#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;
}
void UnixTimeToSystemTime(time_t t, LPSYSTEMTIME pst)
{
FILETIME ft;
UnixTimeToFileTime(t, &ft);
FileTimeToSystemTime(&ft, pst);
}