이전 글에 이어서 시간 얻기에 대해 알아보겠습니다.
CTime과 CTimeSpan을 사용해서도 시간을 얻어올 수 있지만 이 두개의 클래스를 이용하면 시간계산과 차이를 빠르게 알 수 있습니다.
프로젝트를 하나 생성해주고 아래와 같이 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과 다르게 편하게 시간 계산을 할 수 있습니다.