Quick Reference
time.h는 현재 시각, 두 시각의 차이, CPU 사용 시간, 문자열 포맷을 분리합니다. wall clock은 시간 변경 영향을 받으므로 단조 경과 시간과 같은 뜻으로 쓰지 않습니다.
| 필요한 값 | API | 결과 |
|---|---|---|
| 현재 wall clock | time | time_t |
| 두 시각 차이 | difftime | 초 단위 double |
| CPU 사용 시간 | clock | CLOCKS_PER_SEC로 나눔 |
| 날짜 문자열 | localtime/gmtime + strftime | timezone을 명시 |
time_t now = time(NULL);
double elapsed = difftime(end, start);문법
time.h에서 자주 다시 보는 질문은 보통 네 가지입니다.
- 현재 시각:
time - 두 시각 차이:
difftime - CPU 사용 시간:
clock - 사람이 읽는 문자열:
strftime
time_t start = time(NULL);
time_t end = time(NULL);
double elapsed = difftime(end, start);time은 wall-clock에 가까운 현재 시각이고, 차이는 difftime으로 계산하는 편이 안전합니다.
time(NULL)은 (time_t)-1로 실패할 수 있습니다. wall clock은 사용자의 시간 변경, NTP, DST의 영향을 받아 경과 시간 측정용 단조 시계가 아닙니다.
시간 표현
사람이 읽는 날짜 문자열이 필요하면 time_t를 struct tm으로 분해한 뒤 strftime으로 포맷합니다.
time_t now = time(NULL);
struct tm *local = localtime(&now);
char buf[64];
strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", local);localtime이 NULL을 반환하는지와 strftime가 0을 반환해 버퍼에 결과가 들어가지 않았는지를 확인합니다. localtime과 gmtime은 static storage를 재사용하므로 결과를 바로 복사합니다. 실제 경과 시간을 단조롭게 재야 한다면 C 표준 time.h 범위를 넘는 POSIX clock_gettime(CLOCK_MONOTONIC, ...) 같은 플랫폼 API의 지원 조건을 명시합니다.
이 패턴은 로그, 파일명, 화면 출력에서 자주 씁니다.
시간 종류
clock은 다른 질문에 답합니다.
clock_t t1 = clock();
/* CPU work */
clock_t t2 = clock();
double cpu_sec = (double)(t2 - t1) / CLOCKS_PER_SEC;이 값은 프로그램이 실제 CPU를 얼마나 썼는가에 가깝습니다. 그래서 알고리즘 비교에는 유용하지만, sleep이나 I/O 대기를 포함한 실제 경과 시간 측정에는 맞지 않습니다.
빠른 점검
- 현재 시각은
time - 두 시각 차이는
difftime - CPU 사용 시간은
clock - 문자열 포맷은
strftime - 로컬 시간대 분해는
localtime, UTC는gmtime tm_year는 1900 기준,tm_mon은 0부터 시작합니다.
주의할 점
localtime과 gmtime은 정적 저장소를 재사용합니다. 연속 호출 결과를 오래 들고 있거나 스레드 환경에서 공유할 때는 바로 복사하거나 안전한 대안을 써야 합니다.
참고 링크
2 sources