Windows時間データの相互変換

Windowsでは,API/ライブラリによって時間を表現するデータ構造がまちまちで,とても不便です。そこで,おもに使用されている次の3種類のデータを相互変換する関数を作成しました。

time_t
FILETIME
SYSTEMTIME

各データ形式によって精度・表現できる範囲が違っています。プログラムではオーバーフローなどのチェックは行っていませんので,その点は注意してください。

//    time_t -> FILETIME 変換

FILETIME
UnixTimeToFileTime(time_t t){
FILETIME ft;
LONGLONG ll = Int32x32To64(t, 10000000) + 116444736000000000;
ft.dwLowDateTime = (DWORD)ll;
ft.dwHighDateTime = (DWORD)(ll >> 32);
return ft;
}

// time_t -> SYSTEMTIME 変換

SYSTEMTIME
UnixTimeToSystemTime(time_t t){
SYSTEMTIME st;
FILETIME ft = UnixTimeToFileTime(t);
::FileTimeToSystemTime(&ft, &st);
return st;
}

// FILETIME -> time_t 変換

time_t
FileTimeToUnixTime(const FILETIME& ft){
LONGLONG ll;
ll = ((LONGLONG)ft.dwHighDateTime << 32) + ft.dwLowDateTime;
return (time_t)((ll - 116444736000000000) / 10000000);
}

// SYSTEMTIME -> time_t 変換

time_t
SystemTimeToUnixTime(const SYSTEMTIME& st){
FILETIME ft;
::SystemTimeToFileTime(&st, &ft);
return FileTimeToUnixTime(ft);
}


タグ:C++
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス: [必須入力]

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
rank← ランキングはこちらをクリック!

×

この広告は180日以上新しい記事の投稿がないブログに表示されております。