time.h는 "시간"이 한 종류가 아니라, 현재 시각, 경과 시간, CPU 시간, 날짜 포맷을 각각 다른 API로 나눠 봐야 합니다.
- "현재 시각"과 "실행 시간"을 같은 방식으로 재고 있는지 확인하고 싶다
time_t와clock_t차이를 다시 구분하고 싶다- 사람이 읽는 날짜 문자열로 바꾸는 함수를 찾고 있다
숏컷 코드
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_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);이 패턴은 로그, 파일명, 화면 출력에서 자주 씁니다.
시간 종류
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은 정적 저장소를 재사용합니다. 연속 호출 결과를 오래 들고 있거나 스레드 환경에서 공유할 때는 바로 복사하거나 안전한 대안을 써야 합니다.
참고 링크
1 sources