-
[C Language] 27. 시간함수 - C 언어CSE/C Language 2015. 7. 16. 15:40
1. 시간함수의 유용성
시간함수는 여러 가지로 요긴한 함수이다. 난수를 발생시킬 때 시간을 seed로 사용하면 결코 같은 순서로 난수를 발생시키지 않으며, 프로그램 중 오류 발생 시 그 시각을 로그에 저장하면 나중에 오류 분석에 유용하게 쓰일 수 있다. 또한, 특정한 시간에 되었을 때 어떠한 함수를 실행시켜야 한다면 역시 시간함수는 유용하게 사용될 수 있다.
2. time.h
시간함수에 대한 원형은 time.h에 선언되어 있으며, 기본적으로 1970년 1월 1일 자정 이후로 경과한 시간을 초로 환산한 값이나 tm 구조체를 사용하여 시 간을 구한다.
먼저 tm 구조체를 살펴보도록 하자.
12345678910111213struct tm{int tm_sec; /* Seconds: 0-59 (K&R says 0-61?) */int tm_min; /* Minutes: 0-59 */int tm_hour; /* Hours since midnight: 0-23 */int tm_mday; /* Day of the month: 1-31 */int tm_mon; /* Months *since* january: 0-11 */int tm_year; /* Years since 1900 */int tm_wday; /* Days since Sunday (0-6) */int tm_yday; /* Days since Jan. 1: 0-365 */int tm_isdst; /* +1 Daylight Savings Time, 0 No DST,* -1 don't know */};cs 위 구조체 tm에 대한 몇 가지 주의사항을 아래 살펴보도록 하자.
- 시, 분, 초는 0 부터 시작한다. (60초 단위 생성시 + 1 해줘서 구해야함)
- 일은 1 부터 시작한다.
- 월은 0 부터 시작한다.
- 년은 1900 년 이후의 연도이므로 tm_year 에 74가 저장되어 있다면 74년이 아니라, 1974년이 된다.
- 요일은 0 부터 시작한다. 일요일은 0이며 월요일은 1 이다.
3. 여러 가지 시간함수
아래 예제를 통해 직접 시간함수를 적용해 보도록 하자.
123456789101112131415161718192021222324252627282930313233343536373839404142/** timeExam.c** Created on: 2015. 7. 16.* Author: Yeonsu*/#include <stdio.h>#include <time.h>int main(void) {int i;time_t start, end, now;struct tm *timep;char buff[512];double diff;start = time(NULL);time(&now);timep = localtime(&now);printf("%d/%d/%d\n", 1900 + timep->tm_year, timep->tm_mon + 1,timep->tm_mday);puts(asctime(timep));puts(ctime(&now));strftime(buff, sizeof(buff), "%Y:%m:%d", timep);puts(buff);for (i = 0; i < 1000000000; i++);end = time(NULL);diff = difftime(end, start);printf("프로그램 경과 시간: %.2f초", diff);return 0;}cs 'CSE > C Language' 카테고리의 다른 글
[C Language] 30. 2차원 배열 - C 언어 (0) 2015.07.18 [C Language] 29. 1차원 배열 - C 언어 (0) 2015.07.16 [C Language] 28. 배열 개요 - C 언어 (0) 2015.07.16 [C Language] 26. 함수 - 재귀함수(Recursive) - C 언어 (0) 2015.06.13 [C Language] 25. 함수 - 리턴 값 여러 개 받기 - C 언어 (0) 2015.06.13 [C Language] 24. 함수 - 참조에 의한 호출(Call By Reference) - C 언어 (0) 2015.06.13