現在日時を文字列で取得する方法

ログの出力時など、日時の情報を文字列で欲しい場合に便利に使える関数です。時刻を取得するAPIには2種類があり、GetSystemTime関数は協定世界時、 GetLocalTime関数はWindowsで設定している地域の地域時刻を取得します。 今回、作成した関数では両者を切り替えて自由に使うことができる仕様になっています。

// 時刻情報を文字列として取得
// 
// [引数]
// szBuffer : 時刻情報を保存するバッファ (20[byte]以上必須)
// nBufferSize : バッファサイズ
// bJST : TRUEにした場合は協定世界時を返す
// 
// [返値]
// 時刻情報を取得できた場合 : TRUE
// バッファサイズが不足 : FALSE

BOOL GetTimeText(char *szBuffer, int nBufferSize, BOOL bUTC = FALSE)
{
    SYSTEMTIME st;

    // バッファのサイズを確認する
    if (nBufferSize < 20) return FALSE;

    if (bUTC) {
        GetSystemTime(&st);
    } else {
        GetLocalTime(&st);
    }

    wsprintf(szBuffer, "%04d-%02d-%02d %02d:%02d:%02d",
                        st.wYear, st.wMonth, st.wDay,
                        st.wHour, st.wMinute, st.wSecond);

    return TRUE;
}
char buff[20];
if (GetTimeText(buff, sizeof(buff))) {
    printf("JST -> [%s]\n", buff);
}

if (GetTimeText(buff, sizeof(buff), TRUE)) {
    printf("UTC -> [%s]\n", buff);
}

 

Windows API

Posted by @erestage