概要
GetFileTimeで作成時刻を取得し、PCローカル時刻と比較することで導く。
方法
1.ファイル作成時間の取得
GetFileTimeで作成時刻を取得する。2番目の引数が作成時時刻をFILETIME構造体で返す。
GetFileTime( hFile, &creationTime, null, null);
このFILETIME構造体は1601/1/1:00:00:00からの時間を100nsec単位で返す。
dwLowDateTimeとdwLowDateTimeはそれぞれファイル時刻の下位32bitと上位32bitである
typedef struct _FILETIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME;
2.PC loacl 時刻の取得
time_tとlocaltimeを使い、1970/1/1:00:00:00からのUNIX時間で現在時刻を取得する
time_t now = time(NULL);
struct tm *ltime = localtime(&now);
3.FILETIMEのUNIX時間への変換
1601/1/1:00:00:00は1970/1/1:00:00:00の11644473600sec前であるので、変換は下記関数となる
# define WINDOWS_TICK 10000000
# define SEC_TO_UNIX_EPOCH 11644473600LL
unsigned WindowsTickToUnixSeconds(long long windowsTicks)
{
return (unsigned)(windowsTicks / WINDOWS_TICK - SEC_TO_UNIX_EPOCH);
}
windowsTicksにはdwLowDateTimeとdwHighDateTimeをnsecに変換して、代入する
windowsTicks = (((ULONGLONG)ftFileTime.dwHighDateTime) << 32) + ftFileTime.dwLowDateTime;
参考