모두의 코드
C 언어 레퍼런스 - mktime 함수

작성일 : 2010-12-26

아직 C 언어와 친숙하지 않다면, 씹어먹는 C 언어 강좌를 보는 것이 어떻까요?

mktime

#include <time.h>  // C++ 에서는 <ctime>

time_t mktime(struct tm* timeptr);

tm 구조체를 time_t 형식으로 변환한다.timeptr 이 가리키는 tm 구조체를 읽어 들여서 time_t형식으로 리턴한다.

이 때, 이 함수가 tm 구조체에서 참조하는 값은 현재 시각과 날짜 뿐이다. 나머지 정보인 tm_wdaytm_yday 는 무시한다.

참고로 이 함수는 timeptr 이 가리키는 tm 구조체의 내용을 수정하는데, tm 구조체에 들어있는 시각과 날짜 정보를 가지고 tm_wdaytm_yday 를 설정한다. 따라서 이를 통해 역으로 mktime 함수를 호출 하여서 특정한 날짜가 무슨 요일이고, 몇 번째 날인지 추적할 수 도 있다.

 인자

timeptr

tm 구조체를 가리키는 포인터로 반드시 날짜와 시간에 관한 정보가 들어 있어야 한다.

 리턴값

현재 timeptr 로 전달된 날짜와 시각에 맞추어서 이에 대한 time_t값이 리턴된다. 오류 발생시에는 -1 이 리턴된다.

 실행 예제

/*

특정한 날짜가 무슨 요일인지 알아온다.
이 예제는
http://www.cplusplus.com/reference/clibrary/ctime/mktime/
에서 가져왔습니다.

 */
#include <stdio.h>
#include <time.h>

int main() {
  time_t rawtime;
  struct tm* timeinfo;
  int year, month, day;
  char* weekday[] = {"Sunday",   "Monday", "Tuesday", "Wednesday",
                     "Thursday", "Friday", "Saturday"};

  /* 사용자로 부터 날짜를 입력 받는다. */
  printf("Enter year: ");
  scanf("%d", &year);
  printf("Enter month: ");
  scanf("%d", &month);
  printf("Enter day: ");
  scanf("%d", &day);

  /* rawtime 에 time 함수로 현재 시간 정보로 세팅한 뒤,
     사용자로 부터 입력받은 데이터로 년/월/일 정보를 수정한다. */
  time(&rawtime);
  timeinfo = localtime(&rawtime);
  timeinfo->tm_year = year - 1900;
  timeinfo->tm_mon = month - 1;
  timeinfo->tm_mday = day;

  /* mktime 함수를 호출하면 년/월/일 데이터에 따라
     tm_wday 와 tm_yday 를 설정한다. 이 때 리턴되는 time_t 데이터는 사용하지
     않는다.*/
  mktime(timeinfo);

  printf("That day is a %s.\n", weekday[timeinfo->tm_wday]);

  return 0;
}

실행 결과

 연관된 함수

프로필 사진 없음
댓글에 글쓴이에게 큰 힘이 됩니다