| Return Type | Function name | Arguments |
|---|---|---|
| hzEcode | hzXDate::SetDateTime | (const char*,) |
Declared in file: hzDate.h
Defined in file : hzDate.cpp
Function Logic:
Function body:
hzEcode hzXDate::SetDateTime (const char* i)
{
hzTimezone tz ;
uint32_t dow = NULL_DOW ;
uint32_t len = 0;
uint32_t Y = 0;
uint32_t M = 0;
uint32_t D = 0;
uint32_t h = 0;
uint32_t m = 0;
uint32_t s = 0;
uint32_t n ;
uint32_t hOset = 0;
uint32_t mOset = 0;
char buf [4];
if (!i || !i[0])
{ m_hour = 0; m_usec = 0; return E_OK ; }
tz.clear() ;
n = IsDateTime(Y, M, D, h, m, s, i) ;
if (!n)
{
Y = M = D = 0;
for (; *i ;)
{
if (*i < CHAR_SPACE)
break ;
if (*i == CHAR_SPACE || *i == CHAR_COMMA || *i == CHAR_PAROPEN || *i == CHAR_PARCLOSE)
{ len++ ; i++ ; continue ; }
if (IsDigit(*i))
{
n = IsTime(h, m, s, i) ;
if (n)
i += n ;
else
{
if (IsPosint(n, i))
{
if (n < 32&&D == 0) D = n ;
else if (n < 10000&&Y==0)Y= n ;
else
return E_FORMAT ;
for (; IsDigit(*i) ; i++) ;
}
}
}
if (IsAlpha(*i))
{
if (dow == NULL_DOW)
{
for (n = 0; n < 7; n++)
if (!CstrCompareI(i, hz_daynames_full[n]))
{ dow = n ; break ; }
if (dow == NULL_DOW)
{
for (n = 0; n < 7; n++)
if (!CstrCompareI(i, hz_daynames_abrv[n]))
{ dow = n ; break ; }
}
if (dow != 8)
{ for (; IsAlpha(*i) ; i++) ; continue ; }
}
if (M == 0)
{
for (n = 0; n < 12;n++)
if (!CstrCompareI(i, hz_monthnames_full[n]))
{ M = n + 1; break ; }
if (M == 0)
{
for (n = 0; n < 12;n++)
if (!CstrCompareI(i, hz_monthnames_abrv[n]))
{ M = n + 1; break ; }
}
if (M >&eq; 0)
{ for (; IsAlpha(*i) ; i++) ; continue ; }
}
if (!tz.code)
{
for (n = 0; _hzGlobal_Timezones[n].code ; n++)
{
if (!CstrCompareI(i, _hzGlobal_Timezones[n].code))
{ tz = _hzGlobal_Timezones[n] ; break ; }
}
if (tz.code)
{ for (; IsAlpha(*i) ; i++) ; continue ; }
}
return E_FORMAT ;
}
if (*i == CHAR_PLUS || *i == CHAR_MINUS)
{
i++ ; buf[0]= *i ;
i++ ; buf[1]= *i ;
i++ ; buf[2]= *i ;
i++ ; buf[3]= *i ;
if (IsDigit(buf[0])&& IsDigit(buf[1])&& IsDigit(buf[2])&& IsDigit(buf[3]))
{
hOset = ((buf[0]- ''0'')*10)+(buf[1]- ''0'');
mOset = ((buf[2]- ''0'')*10)+(buf[3]- ''0'');
if (hOset > 23||mOset > 59)
return E_FORMAT ;
i++ ;
continue ;
}
return E_FORMAT ;
}
}
}
if (SetDate(Y, M, D) != E_OK) return E_FORMAT ;
if (SetTime(h, m, s) != E_OK) return E_FORMAT ;
return E_OK ;
}