본문 바로가기
개발 TIP/Error 모음

CTime 1970년 이전 미인식 오류

by izen8 2013. 2. 8.
반응형



시간계산등에 많이 쓰이는 함수라면 CTime 클래스를 꼽을 수 있습니다.

하지만 사용도중 주의가 필요한 부분을 발견.

1958년대의 시간계산이 필요하여
CDateTimeCtrl TimeCtrl;

CTime timeTime(1958, 5, 5, 0, 0, 0); // 년월일시분초
TimeCtrl.SetTime(&timeTime); // 오류나는 부분

/*
CTime(int nYear, int nMonth, int nDay, int nHour, int nMin, int nSec, int nDST = -1);

사용자가 직접 시간대를 이용하여 CTime 객체 초기화.
정수형 변수로 년, 월, 일, 시, 분, 초가 차례로 파라미터로 입력.
마지막에 기본값 -1로 설정된 nDST 변수는 여름에 낮시간을 늘리고자 1시간 앞당겨 사용할 때(Daylight savings time) 사용되는 변수로 0 이면 Standard time, 0 보다 큰 값이면 Daylight savings time, 기본값 -1인 경우에는 컴퓨터가 스스로 결정하게 됩니다.

*/

위와같이 CTime 클래스 선언을 해주었으나 SetTime 함수에서 파라미터가 잘못됐다며 assert 오류가 나더군요. MSDN에는 분명히 int형 변수로 년, 월, 일, 시, 분, 초 가 차례로 파라미터로 입력된다고 설명되어 있는데 오류가 나는 당황스러운 상황.

검색을 해보니 CTime 함수는 1970.1.1 ~ 2038.12.31 의 시간범위를 허용한다고 하는군요.
따라서 1970년도 이전이나 2038년도 이후의 시간범위 계산이 필요할 경우 CTime 클래스가 아닌 100.1.1 ~ 9999.12.31 의 시간범위 계산이 가능한 COleDateTime 클래스를 사용해야 합니다.

CDateTimeCtrl TimeCtrl;

COleDateTime timeTime(1958, 5, 5, 0, 0, 0); // 년월일시분초
TimeCtrl.SetTime(timeTime);

위와같이 사용하면 1970년도 이전과 2038년도 이후의 올바른 시간계산이 가능합니다.

 

반응형

댓글