Files
2022-10-26 12:25:11 +08:00

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);
}