Set both the date and time components of this hzXDate instance by a text string of an acceptable format

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

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

Function Logic:

0:START 1:unknown 2:m_hour m_usec 3:Return E_OK 4:items n 5:unknown 6:D 7:M 8:Y 9:unknown 10:unknown 11:unknown 12:items items 13:unknown 14:n 15:unknown 16:i 17:unknown 18:unknown 19:D 20:n<10000&&Y==0 21:Y 22:Return E_FORMAT 23:unknown 24:unknown 25:unknown 26:unknown 27:unknown 28:dow 29:unknown 30:unknown 31:unknown 32:dow 33:unknown 34:unknown 35:unknown 36:unknown 37:unknown 38:n 39:M 40:unknown 41:unknown 42:unknown 43:n 44:M 45:unknown 46:unknown 47:unknown 48:unknown 49:unknown 50:tz 51:unknown 52:unknown 53:Return E_FORMAT 54:unknown 55:items buf items buf items buf items buf 56:unknown 57:buf buf 58:( 59:hOset buf buf ( mOset 60:unknown 61:Return E_FORMAT 62:items 63:Return E_FORMAT 64:unknown 65:Return E_FORMAT 66:unknown 67:Return E_FORMAT 68:Return E_OK

Function body:

hzEcode hzXDate::SetDateTime (const char* i)
{
   //  Set both the date and time components of this hzXDate instance by a text string of an acceptable format
   //  
   //  Arguments: 1) cpDateStr Time and date as string
   //  
   //  Returns: E_FORMAT If the supplied cstr does not amount to a full date and time
   //     E_OK  If this full date and time was set
   hzTimezone  tz ;                //  Timezone
   uint32_t    dow = NULL_DOW ;    //  Doy of week
   uint32_t    len = 0;            //  Length of examined text
   uint32_t    Y = 0;              //  Year
   uint32_t    M = 0;              //  Month
   uint32_t    D = 0;              //  Day
   uint32_t    h = 0;              //  Hour
   uint32_t    m = 0;              //  Minute
   uint32_t    s = 0;              //  Second
   uint32_t    n ;                 //  Counter
   uint32_t    hOset = 0;          //  Hours in timezone offset to GMT
   uint32_t    mOset = 0;          //  Minutes in timezone offset to GMT
   char        buf [4];            //  For reading numbers
   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))
           {
               //  We are looking for a day of the month, a year or the start of a time sequence
               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))
           {
               //  We are looking for a day name, a month name or a timezone code
               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)
           {
               //  We are looking for a timezone offset to GMT (of the form +/-dddd)
               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 ;
}