현재 시각을 가져와서 사용자가 원하는 형태로 출력하는 방법은 여러 가지가 있습니다물론, strftime 함수를 사용하여 tm 구조체를 가지고 바로 서식을 적용하여 출력할 수는 있겠지만이 함수는 다음 기회에 살펴보기로 하고, 이번에는 직접 printf 를 이용하여 서식을 만들어 출력하는 예제를 알려드리겠습니다.


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

#define DAY_OF_WEEK_SIZE 7

const static char* DAY_OF_WEEK[DAY_OF_WEEK_SIZE] = {
	" Sun ", " Mon ", " Tue ", " Wed ", " Thu ", " Fri ", " Sat "
};

int main(int argc, char* argv[]){
	time_t now = time(NULL);
	struct tm* time = localtime(&now);
	int year = time->tm_year + 1900;
	int month = time->tm_mon + 1;
	int dayOfMonth = time->tm_mday;
	int dayOfWeek = time->tm_wday;
	int hour = time->tm_hour;
	int minute = time->tm_min;
	int second = time->tm_sec;
	printf("%d-%d-%d (%s) %d:%d:%d\n", year, month, dayOfMonth, DAY_OF_WEEK[dayOfWeek], hour, minute, second);
	return 0;
}


11 라인

time 함수를 통해 1970 1 1 일 자정 이후 경과된 초 시간을 반환합니다.


12 라인

11 line time 함수로 구한 time_t 값을 매개변수로 넘기면서 localtime 함수를 호출하여 시간을 변환하여 tm 구조체에 저장합니다.


13 ~ 19 라인

tm 구조체 변수에서 각각 년, , , 요일, , , 초 값을 가져와서 main 함수에 있는 지역변수에 저장합니다, 년도는 localtime 함수를 통해 변환할 때기본적으로 1900 을 빼서 저장하기 때문에, 다시 1900 을 더해줘야 하고월은 0 부터 11 까지 저장되기 때문에1 월부터 12 월까지 표현하려면, 1 을 더해줘야 합니다.


20 라인

가져온 시간 정보 값들을 화면에 출력하고 있습니다요일 값은, 0 부터 6 까지 저장될 수 있기 때문에이를 정수가 아닌, 문자열로 변환하기 위해서 6 line 의 상수 형태의 문자열 배열인 DAY_OF_WEEK (“Sum”, “Mon”, “Tue”, “Wed”, “Thu”, “Fri”, “Sat”, “Sun”) 을 사용합니다요일을 정수형태의 인덱스로 받아오고 있기 때문에 이 인덱스를 이용하여 미리 정의해놓은 요일 문자열 배열에서 요일 인덱스에 해당되는 요일 문자열을 가져와서 출력하는 것입니다.


6 라인

const 를 사용한 이유는 상수화시키기 위함이고static 을 사용한 이유는 이 파일 내에서만 접근하게 하기 위함입니다또한, DAY_OF_WEEK 배열의 크기는 4 line #define 을 이용해서 상수화하였습니다.


[실행 결과]




(time 함수 설명 참고)

https://msdn.microsoft.com/ko-kr/library/1f4c8f33.aspx


(localtime 함수 설명 참고)

https://msdn.microsoft.com/ko-kr/library/bf12f0hc.aspx

by kkikkodev 2015. 4. 9. 12:40