프로그래밍을 하다 보면 두개의 날짜나 시간의 간격을 계산해야할 경우가 생깁니다. C언어나 C++에서는 두개의 날짜나 시간의 간격은 difftime 함수를 사용하여 구할 수 있습니다.
time 헤더 파일 포함
#include <time.h> //C언어
#include <ctime> //C++
두 날짜나 시간의 간격을 구하는 difftime 함수는 C언어에서는 <time.h>, C++에서는 경우에는 <ctime> 헤더 파일 안에 내장되어 있습니다.
difftime 함수 사용법
double difftime(time_t time1, time_t time2);
difftime 함수의 리턴값은 double형입니다.
time1 : 이후 시간
time2 : 이전 시간
difftime 함수 사용 예제
시간 차이 구하기
#include <stdio.h>
#include <time.h>
#include <windows.h>
void main() {
time_t start, end;
start = time(NULL);
for (int i = 0; i < 100; i++) {
printf("%d번째 for문\n", i);
Sleep(50);
}
end = time(NULL);
double diff_timer = difftime(end, start);
printf("for문 수행 시간(difftime): %lf초\n", diff_timer);
}
특정 함수의 수행 시간을 알고 싶을때 유용하게 사용할 수 있습니다.
날짜 차이 구하기
#include <stdio.h>
#include <time.h>
int main(void)
{
time_t start, end;
struct tm user_stime;
int tm_day, tm_hour, tm_min, tm_sec;
double diff;
int my_year, my_month, my_day;
printf("년도 : ");
scanf_s("%d", &my_year);
printf("월 : ");
scanf_s("%d", &my_month);
printf("일 : ");
scanf_s("%d", &my_day);
user_stime.tm_year = my_year - 1900; // 년도가 1900년부터 시작하기 때문
user_stime.tm_mon = my_month - 1; //월이 0부터 시작하기 때문
user_stime.tm_mday = my_day;
user_stime.tm_hour = 0;
user_stime.tm_min = 0;
user_stime.tm_sec = 0;
user_stime.tm_isdst = 0; //썸머타임 사용안함
start = mktime(&user_stime);
time(&end);
diff = difftime(end, start);
tm_day = diff / (60 * 60 * 24);
diff = diff - (tm_day * 60 * 60 * 24);
tm_hour = diff / (60 * 60);
diff = diff - (tm_hour * 60 * 60);
tm_min = diff / 60;
diff = diff - (tm_min * 60);
tm_sec = diff;
printf("%d년 %d월 %d일부터 현재까지 %d일 %d시 %d분 %d초 지났습니다.\n", my_year, my_month, my_day, tm_day, tm_hour, tm_min, tm_sec);
return 0;
}
위와 같이 difftime함수를 사용하여 두개의 날짜의 차이를 알 수 있습니다.
time함수를 좀 더 자세히 알고 싶다면 아래 글을 참고해주세요.
'Language > C , C++ , C#' 카테고리의 다른 글
[C언어] 메모리 동적할당 (malloc, free) 함수 사용법 & 예제 (3) | 2021.02.09 |
---|---|
[C언어/C++] 구조체, 클래스의 패딩 바이트에 대하여 (1) | 2021.02.08 |
[C언어/C++] 현재 날짜/시간 원하는 형태로 출력하기 (time, localtime) (0) | 2021.02.06 |
[C언어/C++] 랜덤(rand)함수 활용 아이템 가챠 프로그램 (난수 생성) (0) | 2021.02.05 |