189 lines
4.3 KiB
C++
189 lines
4.3 KiB
C++
#include "StdAfx.h"
|
|
#include ".\wztime.h"
|
|
#include <string>
|
|
#include <stdio.h>
|
|
|
|
|
|
WZTime::WZTime(void)
|
|
{
|
|
}
|
|
|
|
WZTime::~WZTime(void)
|
|
{
|
|
}
|
|
|
|
bool WZTime::GetTime(int nType, char* szTime, int size)
|
|
{
|
|
switch(nType)
|
|
{
|
|
case 1:
|
|
return GetTimeType1(szTime,size);
|
|
case 2:
|
|
return GetTimeType2(szTime,size);
|
|
case 3:
|
|
return GetTimeType3(szTime,size);
|
|
case 4:
|
|
return GetTimeType4(szTime,size);
|
|
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool WZTime::GetTimeType1(char* szTime, int size)
|
|
{
|
|
TCHAR szMonth[10], szDay[10], szHour[10], szMinute[10], szSecond[10];
|
|
|
|
SYSTEMTIME sysTime;
|
|
GetLocalTime(&sysTime);
|
|
WORD wYear = sysTime.wYear;
|
|
|
|
GetTimeFormFromWord(sysTime.wMonth, szMonth); //월
|
|
GetTimeFormFromWord(sysTime.wDay, szDay); //일
|
|
|
|
GetTimeFormFromWord(sysTime.wHour, szHour);
|
|
GetTimeFormFromWord(sysTime.wMinute, szMinute);
|
|
GetTimeFormFromWord(sysTime.wSecond, szSecond);
|
|
|
|
_snprintf(szTime, size, "%d%s%s_%s:%s:%s", wYear, szMonth, szDay, szHour, szMinute, szSecond);
|
|
|
|
return true;
|
|
}
|
|
|
|
bool WZTime::GetTimeType2(char* szTime, int size)
|
|
{
|
|
TCHAR szMonth[10], szDay[10];
|
|
|
|
SYSTEMTIME sysTime;
|
|
GetLocalTime(&sysTime);
|
|
|
|
GetTimeFormFromWord(sysTime.wMonth, szMonth); //월
|
|
GetTimeFormFromWord(sysTime.wDay, szDay); //일
|
|
|
|
_snprintf(szTime, size, "%d%s%s", sysTime.wYear, szMonth, szDay);
|
|
|
|
return true;
|
|
}
|
|
|
|
bool WZTime::GetTimeType3(char* szTime, int size)
|
|
{
|
|
TCHAR szMonth[10], szDay[10], szHour[10], szMinute[10], szSecond[10], szYear[10];
|
|
|
|
SYSTEMTIME sysTime;
|
|
GetLocalTime(&sysTime);
|
|
|
|
//년도의 맨 뒤 2자리만 뽑아낸다.
|
|
WORD wYear = sysTime.wYear;
|
|
_snprintf(szYear, 10, "%d", wYear);
|
|
std::string strYear = szYear;
|
|
strYear = strYear.substr(2, 2);
|
|
|
|
GetTimeFormFromWord(sysTime.wMonth, szMonth); //월
|
|
GetTimeFormFromWord(sysTime.wDay, szDay); //일
|
|
|
|
GetTimeFormFromWord(sysTime.wHour, szHour);
|
|
GetTimeFormFromWord(sysTime.wMinute, szMinute);
|
|
GetTimeFormFromWord(sysTime.wSecond, szSecond);
|
|
|
|
_snprintf(szTime, size, "%s%s%s%s%s%s%d", strYear.c_str(), szMonth, szDay, szHour, szMinute, szSecond, sysTime.wMilliseconds);
|
|
|
|
return true;
|
|
}
|
|
|
|
//4번 형식 051021171543 (2005년 10월 21일 17시 15분 43초). 초단위
|
|
bool WZTime::GetTimeType4(char* szTime, int size)
|
|
{
|
|
TCHAR szMonth[10], szDay[10], szHour[10], szMinute[10], szSecond[10], szYear[10];
|
|
|
|
SYSTEMTIME sysTime;
|
|
GetLocalTime(&sysTime);
|
|
|
|
//년도의 맨 뒤 2자리만 뽑아낸다.
|
|
WORD wYear = sysTime.wYear;
|
|
_snprintf(szYear, 10, "%d", wYear);
|
|
std::string strYear = szYear;
|
|
strYear = strYear.substr(2, 2);
|
|
|
|
GetTimeFormFromWord(sysTime.wMonth, szMonth); //월
|
|
GetTimeFormFromWord(sysTime.wDay, szDay); //일
|
|
|
|
GetTimeFormFromWord(sysTime.wHour, szHour);
|
|
GetTimeFormFromWord(sysTime.wMinute, szMinute);
|
|
GetTimeFormFromWord(sysTime.wSecond, szSecond);
|
|
|
|
_snprintf(szTime, size, "%s%s%s%s%s%s", strYear.c_str(), szMonth, szDay, szHour, szMinute, szSecond);
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
//43번 형식 시간의 차..
|
|
//한달은 30일로 계산..
|
|
int WZTime::GetDiffTimeType4(const char* szTime1, const char* szTime2)
|
|
{
|
|
if( szTime1 == NULL || (strcmp( szTime1, "") == 0) )
|
|
return 0;
|
|
|
|
if( szTime2 == NULL || (strcmp( szTime2, "") == 0) )
|
|
return 0;
|
|
|
|
int nSecond1 = ConvertTime4ToSecond( szTime1 );
|
|
int nSecond2 = ConvertTime4ToSecond( szTime2 );
|
|
if( nSecond2 >= nSecond1)
|
|
return nSecond2 - nSecond1;
|
|
else
|
|
return nSecond1 - nSecond2;
|
|
}
|
|
|
|
|
|
int WZTime::ConvertTime4ToSecond(const char* szTime)
|
|
{
|
|
if( szTime == NULL || (strcmp( szTime, "") == 0) )
|
|
return 0;
|
|
|
|
std::string strTemp;
|
|
std::string strTime = szTime;
|
|
int nYear = 0, nMonth = 0, nDay = 0, nHour = 0, nMinute = 0, nSecond = 0;
|
|
int nTotal = 0;
|
|
|
|
//1. 년도
|
|
strTemp = strTime.substr(0, 2);
|
|
nYear = atoi( strTemp.c_str() );
|
|
nTotal += nYear*12*30*24*60*60;
|
|
|
|
//2. 월
|
|
strTemp = strTime.substr(2, 2);
|
|
nMonth = atoi( strTemp.c_str() );
|
|
nTotal += nMonth*30*24*60*60;
|
|
|
|
//3. 일
|
|
strTemp = strTime.substr(4, 2);
|
|
nDay = atoi( strTemp.c_str() );
|
|
nTotal += nDay*24*60*60;
|
|
|
|
//4. 시간
|
|
strTemp = strTime.substr(6, 2);
|
|
nHour = atoi( strTemp.c_str() );
|
|
nTotal += nHour*60*60;
|
|
|
|
//5. 분
|
|
strTemp = strTime.substr(8, 2);
|
|
nMinute = atoi( strTemp.c_str() );
|
|
nTotal += nMinute*60;
|
|
|
|
//6. 초
|
|
strTemp = strTime.substr(10, 2);
|
|
nSecond = atoi( strTemp.c_str() );
|
|
nTotal += nSecond;
|
|
|
|
return nTotal;
|
|
}
|
|
|
|
|
|
void WZTime::GetTimeFormFromWord(WORD wTime, TCHAR* szTime)
|
|
{
|
|
if(wTime < 10)
|
|
_snprintf(szTime, 10, "0%d", wTime);
|
|
else
|
|
_snprintf(szTime, 10, "%d", wTime);
|
|
}
|