Windowsの日付・時刻を取得・設定する方法

Win32 API で2組の関数が用意されています。

  • GetLocalTime
    SetLocalTime
    Windowsの時計で表示されている年月日を取得・設定できます。
    ↑は時計を見たまんまです。
  • GetSystemTime
    SetSystemTime
    グリニッジ標準時を取得・設定できます。
    日本なら9時間前です。
MSDNを読むと回りくどい日本語が書いてありますが、要するに↑の内容です。 ただ、GetLocalTimeの方が地域情報とかを考慮した情報が返って来ると 書いてあるのですが、むしろGetSystemTimeの方が地域情報から逆算してGMTを 返している気がします。
だって、BIOSの時計は地域情報無しで普通に日本時間に合わせていますから。

例によってサンプルです。

#include <windows.h>
#include <stdio.h>

void ShowSystemTime(SYSTEMTIME systime);

int main()
{
SYSTEMTIME systime;

//現在日時の取得
GetLocalTime(&systime);
ShowSystemTime(systime);

//システム日時の取得
GetSystemTime(&systime);
ShowSystemTime(systime);

//システム日時の設定
systime.wYear--; //1年さかのぼる
SetSystemTime(&systime);

//システム日時の取得&確認表示
GetSystemTime(&systime);
ShowSystemTime(systime);

return 0;
}

void ShowSystemTime(SYSTEMTIME systime)
{
char *week[] = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};

printf("%d/%d/%d(%s) %d:%d:%d'%d\n",systime.wYear
,systime.wMonth
,systime.wDay
,week[systime.wDayOfWeek]
,systime.wHour
,systime.wMinute
,systime.wSecond
,systime.wMilliseconds
);
}