시간 관련 함수(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. 조금 더 정확한 시간을 알고 싶다면??
STSREMTIME 구조체 사용
typedef struct _SYSTEMTIME { // st WORD wYear; WORD wMonth; WORD wDayOfWeek; WORD wDay; WORD wHour; WORD wMinute; WORD wSecond; WORD wMilliseconds; } SYSTEMTIME;
SYSTEMTIME SysTime;
GetLocalTime(&SysTime);
//%03d : 000포맷으로 빈 곳은 0으로 채움 19면 019로 표현 
printf("%02d, %03d",SysTime.wSecond, SysTime.wMilliseconds);

Posted by cyj4369
,