time_t値を FILETIME に変換する
C ランタイムに含まれる時間関数は 、time_t 型を使用して、1970 年 1 月 1 日の午前 0 時から経過した秒数を表します。 次の例では、 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;
}