1. 개요
프로그래밍을 하다보면 날짜를 하루 씩 증가 시킬 필요가 발생한다
보통 단순히 날짜에 1씩 증가시키면 되지만.....
만일 한 달이 넘어 간다면?
일 년이 넘어간다면?
2월 윤달이 껴서 29일이 되어 버리면?

이럴 땐 단순하게 1씩 증가해서는 아무 소용이 없어진다.
그렇다고 그걸 예외 처리로 if .. else if 써 가면서 일일히 했다간 머리 깨질 지도....
그런 사람들을 위해 준비했다

 

2. 소스코드

time_t  	ct;			// 현재 시간 값을 저장할 변수
struct tm *tm;	// 현재 시간을 년월일시분 단위로 저장할 구조체(이건 vc에 기본으로 선언 되어 있으니 이대로 쓰면 된다)
CString  	currentTime;		// 현재 시간을 표시하기 위한 변수
TCHAR  week[7][3] = { "일", "월", "화", "수", "목", "금", "토"};	// 요일 표시를 위한 배열

ct = time(NULL);	// 시스템으로부터 현재 시간을 가져와 ct에 저장하는 함수
ct +=  24 * 3600;	// ct에서 하루를 증가 ( 한 시간은 3600 )
tm = localtime(&ct);	// ct 값을 사람들이 알 수 있도록 tm 배열에 저장

// 년도의 경우 1900년을 기준으로 몇 년 흘러 갔는지 저장되므로 1900을 더함
// 달의 경우 0부터 시작하기 때문에 1을 더함
currentTime.Format("%04d년 %02d월 %02d일 (%s요일)", tm->tm_year+1900 tm->tm_mon+1, tm->tm_mday, week[tm->tm_wday]);

3. 구조체 원형 및 저장 된 헤더

 

#include 

struct tm
{
    int tm_sec;
    int tm_min;
    int tm_hour;
    int tm_mday;
    int tm_mon;
    int tm_year;
    int tm_wday;
    int tm_yday;
    int tm_isdst;
};

 

 

 멤버  의미  값의 범위
 tm_sec  초

 0-61

 tm_min  분  0-59
 tm_hour  시  0-23
 tm_mday  일  1-31
 tm_mon  월  0-11
 tm_year  년(1900 이후)

 

 tm_wday  요일

 0-6

 tm_yday  1월 1일부터 경과 일 수  0-365
 tm_isdst  서머 타임제 실시 여부

 0 이상 : 실시, 0 : 미실시, 0 이하 : 알 수 없음

 

* tm_sec 은 보통의 경우 0 부터 59 까지의 값을 가지게 되겠지만 종종 지구 자전 속도의 차이로 인해서 몇 년 마다 한 번 씩 '윤초' 를 도입하여 시간을 보정하는 경우가 있는데 이 때문에 tm_sec 의 값이 60 혹은 61 이 될 수 있다.

 

 

 

'프로그래밍 > C++' 카테고리의 다른 글

SNMP OID  (0) 2013.10.17
[MFC] Enter, ESC 키로 Dialog 종료 방지  (0) 2013.06.28
[MFC] 마우스 커서 모래시계(대기) 변경  (0) 2013.06.13
Wininet을 이용한 URL 파일 다운로드  (1) 2013.04.24
헝가리안 표기법  (0) 2013.04.24

+ Recent posts