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;
}