글
현재 시각을 가져와서 사용자가 원하는 형태로 출력하는 방법은 여러 가지가 있습니다. 물론, 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 함수 설명 참고)
'1.1) 실습' 카테고리의 다른 글
의사 난수 (랜덤 숫자) 생성하기 (0) | 2015.05.17 |
---|---|
배열 내용을 다른 배열에 한번에 복사하기 (1) | 2015.05.17 |
변수를 특정 값으로 초기화하기 (or 배열을 특정 값으로 한번에 초기화하기) (0) | 2015.05.17 |
현재 틱 카운트 (TickCount) 를 이용하여 시간 재기 (0) | 2015.05.17 |
화면 출력 (에코) 없이 키보드 입력 값 가져오기 (2) | 2015.05.17 |
비동기적으로 사용자 입력이 있는지 확인하기 (0) | 2015.05.05 |
콘솔 글자 색 변경하기 (4) | 2015.04.10 |
콘솔 창 크기 변경하기 (0) | 2015.04.09 |
콘솔 커서 숨기기 & 두께 조절하기 (0) | 2015.04.09 |
콘솔 커서 좌표 이동하기 (6) | 2015.04.09 |
RECENT COMMENT