[MFC] 시간 얻기 – 2 , CTime, CTimeSpan

[MFC] 시간 얻기 – 2 , CTime, CTimeSpan

이전 글에 이어서 시간 얻기에 대해 알아보겠습니다.

CTimeCTimeSpan을 사용해서도 시간을 얻어올 수 있지만 이 두개의 클래스를 이용하면 시간계산과 차이를 빠르게 알 수 있습니다.

프로젝트를 하나 생성해주고 아래와 같이 Static Control과 버튼을 만들어줍니다.

1. 시간 얻기

“CTime” 버튼에 아래와 같이 코딩합니다.

void CMFCApplication1Dlg::OnBnClickedButton1()
{
	// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
	CTime tmCur = CTime::GetCurrentTime();
	CString sTime;
	sTime.Format( _T("%d년 %d월 %d일 %d시 %d분 %d초"),
					tmCur.GetYear(), tmCur.GetMonth(), tmCur.GetDay(),
					tmCur.GetHour(), tmCur.GetMinute(), tmCur.GetSecond() );
	m_stTIme.SetWindowText( sTime );
}

그러면 아래와 같이 현재 시간을 표시합니다.

2. 시간과 시간 차이 계산하기

만약 올해 초(2020년 1월 1일 0시 0분 0초)에서 오늘까지 몇일 지났는지 알고싶으면 어떻게 해야할까요?
그럴때 CTimeSpan을 사용하시면 됩니다.

“CTime – CTime” 버튼에 아래와 같이 코딩합니다.

void CMFCApplication1Dlg::OnBnClickedButton2()
{
	// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
	CTime tmCur = CTime::GetCurrentTime();
	CTime tmPast( 2020, 1, 1, 0, 0, 0 );

	CTimeSpan tmSpan = tmCur - tmPast;
	CString sTime;
	sTime.Format( _T( "%d일 %d시 %d분 %d초" ),
		tmSpan.GetDays(), tmSpan.GetHours(), tmSpan.GetMinutes(), tmSpan.GetSeconds() );
	m_stTIme.SetWindowText( sTime );
}

실행 시켜 보시면 위와 같이 표시가 됩니다.

만약 총 몇 시간인지, 몇 분인지, 몇 초인지 계산하시려면 아래 함수를 사용하시면 됩니다.

tmSpan.GetTotalHours()
tmSpan.GetTotalMinutes()
tmSpan.GetTotalSeconds()

3. 몇 시간 전(후) 계산하기

위 방식은 정해진 두 개의 시간에서 시간의 차이를 계산하는 방법입니다.

반대로 만약 오전 10시 20분 30초에서 3시간 50분 40초 뒤엔 몇 시일지 계산하는 것은 어떻게 해야할까요??

“CTime + CTimeSpan” 버튼에 아래와 같이 코딩합니다.

void CMFCApplication1Dlg::OnBnClickedButton3()
{
	// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
	CTime tmCur( 2020, 02, 18, 10, 20, 30 );
	CTimeSpan tmSpan( 0, 3, 50, 40 );

	CTime tmVal = tmCur + tmSpan;
	CString sTime;
	sTime.Format( _T( "%d년 %d월 %d일 %d시 %d분 %d초" ),
		tmVal.GetYear(), tmVal.GetMonth(), tmVal.GetDay(),
		tmVal.GetHour(), tmVal.GetMinute(), tmVal.GetSecond() );
	m_stTIme.SetWindowText( sTime );
}

위 코드를 실행시켜 보면 아래와 같이 표시됩니다.

오전 10시 20분 0초에서 3시간 20분 30초 뒤 계산 결과는 14시 11분 10초로 표시 합니다.

보시는 것처럼 CTime과 CTimeSpan을 사용하면 SYSTEMTIME과 다르게 편하게 시간 계산을 할 수 있습니다.