Return TypeFunction nameArguments
hzEcodehzXDate::SetDateTime(const char*,)

Declared in file: hzDate.h
Defined in file : hzDate.cpp

Function Logic:

0:START 1:!i||!i[0] 2:m_hour m_usec 3:Return E_OK 4:hzTimezone::clear IsDateTime n 5:!n 6:D M Y 7:*i; 8:*i<(char)32 9:*i==(char)32||*i==(char)44||*i==(char)40||*i==(char)41 10:items items 11:IsDigit(*i) 12:IsTime n 13:n 14:i 15:IsPosint(n,i) 16:n<32&&D==0 17:D 18:n<10000&&Y==0 19:Y 20:Return E_FORMAT 21:IsDigit(*i); 22:IsAlpha(*i) 23:dow==NULL_DOW 24:n<7; 25:!CstrCompareI(i,hz_daynames_full[n]) 26:dow 27:dow==NULL_DOW 28:n<7; 29:!CstrCompareI(i,hz_daynames_abrv[n]) 30:dow 31:dow!=8 32:IsAlpha(*i); 33:M==0 34:n<12; 35:!CstrCompareI(i,hz_monthnames_full[n]) 36:M 37:M==0 38:n<12; 39:!CstrCompareI(i,hz_monthnames_abrv[n]) 40:M 41:M>=0 42:IsAlpha(*i); 43:!tz.code 44:_hzGlobal_Timezones[n].code; 45:!CstrCompareI(i,_hzGlobal_Timezones[n].code) 46:tz 47:tz.code 48:IsAlpha(*i); 49:Return E_FORMAT 50:*i==(char)43||*i==(char)45 51:items buf items buf items buf items buf 52:IsDigit(buf[0])&&IsDigit(buf[1])&&IsDigit(buf[2])&&IsDigit(buf[3]) 53:hOset mOset 54:hOset>23||mOset>59 55:Return E_FORMAT 56:items 57:Return E_FORMAT 58:SetDate(Y,M,D)!=E_OK 59:Return E_FORMAT 60:SetTime(h,m,s)!=E_OK 61:Return E_FORMAT 62:Return E_OK

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