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

 

 

 

 

 

 

 

 

1. 개요

프로그래밍 작업을 하다보면 대개 정보를 제공해 주는 서버를 통해 파일을 가져와 파싱해 사용하는 경우가 존재한다.(예를 들어 기상청의 기상정보 xml 파일을 가져온다는 등)

이를 위해 실제 파일을 가져 올 수 있는 함수가 존재하여 포스팅 해보도록 하겠다.

 

2. 소스

HINTERNET   m_hInternet, m_hURL;	// URL 파일 다운에 필요한 핸들
DWORD dwValue = 10000;
HANDLE hFile;	// 다운 받은 파일 저장 핸들
DWORD dwSize = 0, dwRead = 0, dwWritten = 0;

// Set Internet Open
m_hInternet = InternetOpen ("AZITROAPPDOWN", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);

 
// Open Option
InternetSetOption (m_hInternet, INTERNET_OPTION_CONNECT_TIMEOUT, &dwValue, sizeof(dwValue));
InternetSetOption (m_hInternet, INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT, &dwValue, sizeof(dwValue));
InternetSetOption (m_hInternet, INTERNET_OPTION_CONTROL_SEND_TIMEOUT, &dwValue, sizeof(dwValue));
InternetSetOption (m_hInternet, INTERNET_OPTION_DATA_SEND_TIMEOUT, &dwValue, sizeof(dwValue));
InternetSetOption (m_hInternet, INTERNET_OPTION_DATA_RECEIVE_TIMEOUT, &dwValue, sizeof(dwValue));

// URL Open
m_hURL= InternetOpenUrl (m_hInternet, "파일을 다운 받을 URL 주소", NULL, 0, INTERNET_FLAG_RELOAD, 0);
 

// URL Open 실패를 방지 하기 위한 루틴
TCHAR *szStatusCode = (TCHAR*)malloc(10000);
DWORD dwInfoSize = sizeof(szStatusCode);
HttpQueryInfo(m_hURL, HTTP_QUERY_STATUS_CODE, szStatusCode, &dwInfoSize, NULL);
long nStatusCode = _ttol(szStatusCode);

if(nStatusCode == HTTP_STATUS_OK)
{
	// 다운 받은 파일을 저장할 파일 생성
	hFile = CreateFile (szAlertPath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
	InternetQueryDataAvailable (m_hURL, &dwSize, 0, 0);	// 파일로 저장할 버퍼 크기 알아냄
	InternetReadFile (m_hURL, pDownBuf, dwSize, &dwRead);	// 알아낸 크기 만큼 읽기(dwRead는 실제 읽은 크기)
	WriteFile (hFile, pDownBuf, dwRead, &dwWritten, NULL);	//  읽은 크기만큼 저장
}
	
// 사용이 끝난 핸들 비우기
InternetCloseHandle (m_hURL);
m_hURL = NULL;
InternetCloseHandle (m_hInternet);
m_hInternet = NULL; 

 

3. 이슈

한글 URL 인식 이슈 : http://blog.naver.com/sin_01/70147909216 참조

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

SNMP OID  (0) 2013.10.17
[MFC] Enter, ESC 키로 Dialog 종료 방지  (0) 2013.06.28
[MFC] 마우스 커서 모래시계(대기) 변경  (0) 2013.06.13
시간 구조체  (0) 2013.04.26
헝가리안 표기법  (0) 2013.04.24

 

 

 

 

 

 

 

1. 헝가리안 표기법이란?

헝가리안 표기법은 Microsoft의 Charles Simonyi 박사가 고안 한 것으로 표준 코딩 규칙을 정하기 위해 도입한 방법론

프로그래밍에서 사용하는 변수의 이름을 지정하는 규칙을 말함

 

2. 헝가리안 표기법 규칙

변수 타입

접두어
int n
long l
double d

bool

b
string str
char sz
pointer(*) p
함수 포인터 fn

핸들

h

맴버변수

m_
전역변후 g_
클래스 C

ex)

int nNumber;

bool bFlag;

CString strMessage;

 

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

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

+ Recent posts