// attribute_time.cpp: implementation of the Time Attribute
// IMPORTANT: this attribute works only with GMT time
#include "stdafx.h"
#include "attribute_time.h"
#include <time.h>
#include <stdlib.h>
// Construction/Destruction
CAttribute_Time::CAttribute_Time(__time64_t tVal, int index) : CAttribute_Generic(index)
{
m_size = sizeof(__time64_t);
value = NULL;
value_tmp = NULL;
value = new __time64_t;
value_tmp = new __time64_t;
if ( !value || !value_tmp )
{
throw;
}
*value = tVal;
*value_tmp = tVal;
ClassName = _T("CAttribute_Time");
Kind = IDC_ATTR_TIME;
}
CAttribute_Time::~CAttribute_Time()
{
try
{
if (value)
delete value;
if (value_tmp)
delete value_tmp;
}
catch (...)
{
}
}
void CAttribute_Time::Get_Time(__time64_t& nDummy)
{
if (!value)
return;
try
{
nDummy = (*value);
}
catch (...) {
}
}
void CAttribute_Time::Get_tmp_Time(__time64_t& nDummy)
{
if (!value_tmp)
return;
try
{
nDummy = (*value_tmp);
}
catch (...) {
}
}
void CAttribute_Time::Set_Time(__time64_t& nDummy)
{
if (!value)
return;
try
{
(*value) = nDummy;
}
catch (...) {
}
}
void CAttribute_Time::Set_tmp_Time(__time64_t& nDummy)
{
if (!value_tmp)
return;
try
{
(*value_tmp) = nDummy;
}
catch (...) {
}
}
void CAttribute_Time::SetAttributeCast(CString& szDummy)
{
if (!value)
return;
int nYear, nMonth, nDay, nHour, nMin, nSec;
nYear = 2001; nMonth = 1; nDay = 1;
nHour = nMin = nSec = 0;
try
{
size_t nLen = szDummy.GetLength();
_sntscanf(szDummy.GetBuffer((int) nLen+1),nLen,IDC_ATTR_TIMESTRINGFMT
,&nYear
,&nMonth
,&nDay
,&nHour
,&nMin
,&nSec
);
szDummy.ReleaseBuffer();
}
catch (...)
{
nYear = 2001; nMonth = 1; nDay = 1;
nHour = nMin = nSec = 0;
szDummy.ReleaseBuffer();
}
try
{
struct tm* pTm = NULL;
pTm = new tm();
if (!pTm)
throw;
pTm->tm_year = (nYear - IDC_BASE_TM_YEAR);
pTm->tm_mon = (nMonth - IDC_BASE_ST_MONTH);
pTm->tm_mday = nDay;
pTm->tm_hour = nHour;
pTm->tm_min = nMin;
pTm->tm_sec = nSec;
pTm->tm_isdst = 0;
*value = _mktime64(pTm);
if (pTm)
delete pTm;
}
catch (...)
{
}
}
void CAttribute_Time::SetTmpAttributeCast(CString& szDummy)
{
if (!value_tmp)
return;
int nYear, nMonth, nDay, nHour, nMin, nSec;
nYear = 2001; nMonth = 1; nDay = 1;
nHour = nMin = nSec = 0;
try
{
size_t nLen = szDummy.GetLength();
_sntscanf(szDummy.GetBuffer((int) nLen+1),nLen,IDC_ATTR_TIMESTRINGFMT
,&nYear
,&nMonth
,&nDay
,&nHour
,&nMin
,&nSec
);
szDummy.ReleaseBuffer();
}
catch (...)
{
nYear = 2001; nMonth = 1; nDay = 1;
nHour = nMin = nSec = 0;
szDummy.ReleaseBuffer();
}
try
{
struct tm* pTm = NULL;
pTm = new tm();
if (!pTm)
throw;
pTm->tm_year = (nYear - IDC_BASE_TM_YEAR);
pTm->tm_mon = (nMonth - IDC_BASE_ST_MONTH);
pTm->tm_mday = nDay;
pTm->tm_hour = nHour;
pTm->tm_min = nMin;
pTm->tm_sec = nSec;
pTm->tm_isdst = 0;
*value_tmp = _mktime64(pTm);
if (pTm)
delete pTm;
}
catch (...)
{
}
}
void CAttribute_Time::Get_Value_Str(CString& szDummy)
{
if (!value)
return;
try
{
struct tm TMtime;
_gmtime64_s(&TMtime,value);
_tcsftime(szDummy.GetBuffer(MAX_PATH), MAX_PATH-1, _T("%Y-%m-%d %H:%M:%S"), &TMtime);
szDummy.ReleaseBuffer();
}
catch (...)
{
szDummy.ReleaseBuffer();
}
}
void CAttribute_Time::Get_Value_Str_tmp(CString& szDummy)
{
try
{
struct tm TMtime;
_gmtime64_s(&TMtime,value_tmp);
_tcsftime(szDummy.GetBuffer(MAX_PATH), MAX_PATH-1, _T("%Y-%m-%d %H:%M:%S"), &TMtime);
szDummy.ReleaseBuffer();
}
catch (...)
{
szDummy.ReleaseBuffer();
}
}
bool CAttribute_Time::IsValueTmpIdentical()
{
if (!value || !value_tmp)
return false;
return ((*value) == (*value_tmp));
}
BOOL CAttribute_Time::IsValueTmpIdenticalMFC()
{
if (IsValueTmpIdentical())
return TRUE;
return FALSE;
}
void CAttribute_Time::Empty_Value(bool ori)
{
try
{
struct tm* pTm = NULL;
pTm = new tm();
if (!pTm)
throw;
pTm->tm_year = (2001 - IDC_BASE_TM_YEAR);
pTm->tm_mon = 0;
pTm->tm_mday = 1;
pTm->tm_hour = 0;
pTm->tm_min = 0;
pTm->tm_sec = 0;
pTm->tm_isdst = 0;
if (ori)
{
if(value)
(*value) = _mktime64(pTm);
}
else
{
if(value_tmp)
(*value_tmp) = _mktime64(pTm);
}
if (pTm)
delete pTm;
}
catch (...)
{
}
}
void CAttribute_Time::Get_DBTime(TIMESTAMP_STRUCT& tStamp)
{
if(!value)
return;
try
{
struct tm TMtime;
struct tm * pTm = &TMtime;
_gmtime64_s(pTm,value);
if (pTm)
{
tStamp.year = (SQLSMALLINT) (pTm->tm_year + IDC_BASE_TM_YEAR);
tStamp.month = (SQLUSMALLINT) (pTm->tm_mon + IDC_BASE_ST_MONTH);
tStamp.day = (SQLUSMALLINT) pTm->tm_mday;
tStamp.hour = (SQLUSMALLINT) pTm->tm_hour;
tStamp.minute = (SQLUSMALLINT) pTm->tm_min;
tStamp.second = (SQLUSMALLINT) pTm->tm_sec;
tStamp.fraction = (SQLUINTEGER) 0;
}
}
catch (...) {
}
}
void CAttribute_Time::Get_tmp_DBTime(TIMESTAMP_STRUCT& tStamp)
{
if(!value_tmp)
return;
try
{
struct tm TMtime;
struct tm * pTm = &TMtime;
_gmtime64_s(pTm,value_tmp);
if (pTm)
{
tStamp.year = (SQLSMALLINT) (pTm->tm_year + IDC_BASE_TM_YEAR);
tStamp.month = (SQLUSMALLINT) (pTm->tm_mon + IDC_BASE_ST_MONTH);
tStamp.day = (SQLUSMALLINT) pTm->tm_mday;
tStamp.hour = (SQLUSMALLINT) pTm->tm_hour;
tStamp.minute = (SQLUSMALLINT) pTm->tm_min;
tStamp.second = (SQLUSMALLINT) pTm->tm_sec;
tStamp.fraction = (SQLUINTEGER) 0;
}
}
catch (...) {
}
}
void CAttribute_Time::Set_DBTime(TIMESTAMP_STRUCT& tStamp)
{
if(!value)
return;
try
{
struct tm* pTm = NULL;
pTm = new tm();
if (!pTm)
throw;
pTm->tm_year = (int) (tStamp.year - IDC_BASE_TM_YEAR);
pTm->tm_mon = (int) (tStamp.month - IDC_BASE_ST_MONTH);
pTm->tm_mday = (int) tStamp.day;
pTm->tm_hour = (int) tStamp.hour;
pTm->tm_min = (int) tStamp.minute;
pTm->tm_sec = (int) tStamp.second;
pTm->tm_isdst = 0;
(*value) = _mktime64(pTm);
if (pTm)
delete pTm;
}
catch (...)
{
}
}
void CAttribute_Time::Set_tmp_DBTime(TIMESTAMP_STRUCT& tStamp)
{
if(!value_tmp)
return;
try
{
struct tm* pTm = NULL;
pTm = new tm();
if (!pTm)
throw;
pTm->tm_year = (int) (tStamp.year - IDC_BASE_TM_YEAR);
pTm->tm_mon = (int) (tStamp.month - IDC_BASE_ST_MONTH);
pTm->tm_mday = (int) tStamp.day;
pTm->tm_hour = (int) tStamp.hour;
pTm->tm_min = (int) tStamp.minute;
pTm->tm_sec = (int) tStamp.second;
pTm->tm_isdst = 0;
(*value_tmp) = _mktime64(pTm);
if (pTm)
delete pTm;
}
catch (...)
{
}
}
void CAttribute_Time::GetAttributeBinData(BIN_KIND_TYPE& bType,BIN_KIND_SIZE& bSize,void*& pAttribute)
{
try
{
bType = BIN_KIND_TIME;
bSize = (BIN_KIND_SIZE) (m_size);
pAttribute = (void*) (value);
}
catch (...)
{
bType = BIN_KIND_NULL;
bSize = 0;
pAttribute = NULL;
LTRACE(LOG_TRLVL_ERROR,_T("CAttribute_Time::GetAttributeBinData - error: could not get the value pointer."));
}
}
void CAttribute_Time::SetAttributeBinData(BIN_KIND_TYPE bType,BIN_KIND_SIZE bSize,void* pAttribute)
{
if ( bType != BIN_KIND_TIME )
return;
m_size = (size_t) (bSize);
try
{
*(value) = *((__time64_t*) pAttribute);
}
catch (...)
{
LTRACE(LOG_TRLVL_ERROR,_T("CAttribute_Time::SetAttributeBinData - error: could not set the value."));
}
}