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. 구조체 원형 및 저장 된 헤더
#includestruct 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 |