○現在時刻を取得する

■年月日を求める
#include <stdio.h>
#include <time.h>
int main()
{
     time_t now = time(NULL);
     struct tm *pnow = localtime(&now);
     char week[][3] = {"日","月","火","水","木","金","土"};

     printf("今日は%2d年%2d月%2d日(%s)です。\n",
        pnow->tm_year+1900,
	    pnow->tm_mon + 1,
	    pnow->tm_mday,
	    week[pnow->tm_wday]);

     return 0;
}
実行結果 現在の日付が表示されます

今日は2006年12月 1日(金)です。


■時分秒を求める
#include <stdio.h>
#include <time.h>

int main(){

     time_t now = time(NULL);
     struct tm *pnow = localtime(&now);

	char buff[128]="";

	sprintf(buff,"%d:%d:%d",pnow->tm_hour,pnow->tm_min,pnow->tm_sec);
	printf(buff);
	getchar();

	return 0;
}
実行結果 現在の時間が表示されます

4:56:55


■もっと短い時間を取得する

秒単位での取得では数ミリ秒での処理とか細かい事が出来ないため、もっと細かい正確な時間を取得します。
そのため、UNIX時間の1970年1月1日からの経過秒数とマイクロ秒を取得します。
#include <stdio.h>
#include <sys/time.h>

int main(){

	while(1){
		struct timeval _time;
		
		gettimeofday(&_time, NULL);
		
		//UNIX時間の1970年1月1日からの経過秒数
		long sec = _time.tv_sec;
		
		//マイクロ秒 0から999999までの値を取り、一杯になると秒がカウントアップされていく
		long usec = _time.tv_usec;
		
		
		printf("%ld %ld\n",sec,usec);
	}

	return 0;
}
実行すると数字の羅列である秒と、マイクロ秒が出力されます。


■時間の計算をする(Windows限定)
	//FILETILE 構造体は 1601年1月1日から 100 ナノ秒間隔の数を表す
	//二つの 32 ビットメンバを持つ 64 ビットの値です
	//UInt64 値型は、値が 0 から 18,446,744,073,709,551,615 までの範囲の符号なし整数を表します。

	UINT64 SEC=10*1000*1000;//分解能100ナノのFILETIMEの1秒
	UINT64 MINUT = SEC*60;//1分
	UINT64 HOUR=MINUT*60;//1時間
	UINT64 time;
	SYSTEMTIME st,st2;
	GetLocalTime(&st);//現在の時刻を取得
	SystemTimeToFileTime(&st,(FILETIME *)&time);//時間→数値

	time+=HOUR;//1時間を追加
	time+=MINUT*10;//10分を追加

	FileTimeToSystemTime((FILETIME *)&time,&st2);//数値→時間

	TRACE("%d:%d:%d\n",st2.wHour,st2.wMinute,st2.wSecond);//現在時刻の1時間10分後が表示


▲トップページ > Windows と C++