시간 관련 함수(time.h)
모든 시간 함수의 원형은 time.h 헤더 파일에 선언되어 있으므로 시간 관련 함수를 사용하려면 반드시 time.h를 인클루드 해야 합니다.
시간과 관련된 가장 기본적인 함수는 현재 시간을 구하는 time 함수이다.
time_t time( time_t *timer );
char *ctime( const time_t *timer );
time 함수는 1970년 1월 1일 자정 이후 경과한 초를 조사하는데 리턴 타입인 time_t형은 시스템에 따라 달라지며 Windows에서는 4바이트 정수(typedef long time_t;)로 정의되어 있습니다.
time 함수는 time_t형의 포인터를 인수로 받아 이 인수에 조사된 시간을 채워 주기도 하고 같은 값을 리턴 하기도 합니다.
둘 중 아무 값이나 사용해도 상관없으며 리턴 값만 사용할 경우는 인수로 NULL을 전달할 수도 있습니다.
이 함수는 최대 2038년 1월 18일까지의 날짜를 표현할 수 있으며 64비트 버전인 _time64 함수는 3000년 12월 31일까지 표현 가능합니다.
이 함수가 조사하는 시간은 초 단위이기 때문에 이 값으로부터 우리가 일상적으로 사용하는 시간을 바로 구하기는 무척 어렵습니다.
또한 세계 표준시 포맷으로 되어 있어 우리나라 시간과 일치하지도 않습니다.
ctime 함수는 time_t형의 경과 초를 출력하기 편리한 문자열 형태로 바꾸며 세계 표준시로 된 시간을 지역 설정에 맞게 조정해 주기도 합니다.
변환된 문자열은 26문자 길이로 되어 있으며 끝에 개행 문자가 있어 printf 등의 함수로 곧바로 출력할 수 있습니다.
ctime이 변환 결과를 저장하기 위해 사용하는 버퍼는 라이브러리에서 미리 할당해 놓은 정적 메모리 영역이며 이 영역은 asctime, gmtime, localtime 등의 함수들이 공유합니다.
예제4) 현재 시간 출력
#include <stdio.h>
#include <time.h>
int main()
{
time_t t;
time(&t);
printf("현재 시간은 %d입니다.\n", t);
printf("현재 시간은 %s입니다.\n", ctime(&t));
return 0;
}
char *_strdate(char *datestr); => 현재 날짜를 문자열로 리턴
char *_strtime(char *timestr); => 현재 시간을 문자열로 리턴
_strdate는 날짜를 MM/DD/YY 포맷으로 구해 datestr 버퍼에 복사하며 _strtime은 시간을 HH:MM:SS 포맷으로 구해 timestr 버퍼에 복사하는데 이 함수가 구해주는 시간은 24시간제입니다.
두 함수로 전달되는 버퍼는 널 문자까지 고려하여 최소한 9바이트 이상이어야 합니다.
예제5) 현재 날짜와 시간을 출력하는 예제
#include <stdio.h>
#include <time.h>
int main()
{
char Date[10];
char Time[10];
_strdate(Date);
_strtime(Time);
printf("날짜: %s, 시간: %s\n",Date,Time);
return 0;
}
clock_t clock( void );
작업 시점의 시간을 출력해주는 함수
처음 호출하면 0을 가지게 되고 두 번째 호출하게 되면 첫 번째 호출한 시점에서 경과한 시간을 리턴 시켜 주게 됩니다.
예제6) for 문을 10000번 돌리는 데 걸리는 시간
#include <stdio.h>
#include <time.h>
int main()
{
clock_t t1, t2;
int i;
t1=clock();
for(i=0; i<10000; i++)
{
t2 = clock();
printf("i=%d t2=%d\n",i,(t2-t1));
}
}
일정시간 동안 대기하는 sleep 함수 만들기
#include
<stdio.h>
#include
<time.h>
void sleep(int n);
int main()
{
int i;
for (i=1; i <= 10; i++)
{
printf("*");
sleep(1000);
}
}
void sleep(int n)
{
long time;
time = n + clock();
printf("잠시대기\n");
printf("%ld\n", time - clock() );
while( time > clock() )
{
}
}
Tip. 조금 더 정확한 시간을 알고 싶다면??
//%03d : 000포맷으로 빈 곳은 0으로 채움 19면 019로 표현
printf("%02d, %03d",SysTime.wSecond, SysTime.wMilliseconds);
Tip. 조금 더 정확한 시간을 알고 싶다면??
STSREMTIME 구조체 사용
typedef struct _SYSTEMTIME { // st
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME;
[출처] CSYSTEMTIME & GetLocalTime|작성자 럭셔리
SYSTEMTIME SysTime;
GetLocalTime(&SysTime);//%03d : 000포맷으로 빈 곳은 0으로 채움 19면 019로 표현
printf("%02d, %03d",SysTime.wSecond, SysTime.wMilliseconds);
'Development > C/C++' 카테고리의 다른 글
[화면 처리 함수(gotoxy, wherex, wherey)] (0) | 2011.11.02 |
---|---|
[시스템 함수(exit, system)] (0) | 2011.11.02 |
[숫자와 문자열 변환 함수(itoa, atoi, atol, atof, strtol)] (0) | 2011.11.02 |
[수학 함수(sin, sqrt, pow, floor, ceil, abs 등)] (0) | 2011.11.02 |
[문자 함수(isupper, isalnum, isalpha 등)] (0) | 2011.11.02 |