時間情報の取得方法と扱い方
作成:
ここではC言語での時間情報の取得方法について説明していく、 時間情報には様々な種類があり、また環境により利用できる関数も変わってくる。 C言語の環境であればどこでも利用できる標準関数から始まり、POSIX環境、Windows環境で利用できるAPIも紹介する。
Windows環境
WindowsのAPIでの時刻取得方法について紹介する。
GetLocalTime() GetSystemTime()
WindowsのAPIには以下の様な関数が用意されている。
VOID GetLocalTime(LPSYSTEMTIME lpSystemTime);
VOID GetSystemTime(LPSYSTEMTIME lpSystemTime);
GetLocalTime()
が、時差を含むローカル時間、
GetSystemTime()
が、時差を含まないシステム時間を返す。
取得に利用する構造体は以下のようになっていて、
struct tm
に似た構造になっている。
数値を表示する際に加算などは不要な値が設定されており、より素直に使えると思う。
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME;
使用例は以下、
#include <stdio.h>
#include <windows.h>
int main(int argc, char **argv) {
SYSTEMTIME st;
char *dayofweek[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
GetLocalTime(&st);
printf("%04d/%02d/%02d %s %02d:%02d:%02d.%03d\n",
st.wYear, st.wMonth, st.wDay,
dayofweek[st.wDayOfWeek],
st.wHour, st.wMinute, st.wSecond,
st.wMilliseconds);
GetSystemTime(&st);
printf("%04d/%02d/%02d %s %02d:%02d:%02d.%03d\n",
st.wYear, st.wMonth, st.wDay,
dayofweek[st.wDayOfWeek],
st.wHour, st.wMinute, st.wSecond,
st.wMilliseconds);
return 0;
}
実行結果は以下のようになる。
2015/11/05 Thu 22:25:52.104 2015/11/05 Thu 13:25:52.104
構造体としてはミリ秒までを表現できるが、実際の分解能はミリ秒よりも荒く、
前項で紹介したclock_getres()
の Cygwin 上での実行結果に出ているように、
分解能は15ミリ秒程度だ。