bool TimeStamp::fromRFC2822( TimeStamp &target, const char *source ) { const char *pos = source; // Find the comma while ( *pos != 0 && *pos != ',' ) pos++; if ( *pos == 0 || (pos-source)!= 3 ) return false; // is this a valid day? if( getRFC2822_WeekDay( source ) < 0 ) return false; pos++; if ( *pos == 0 ) return false; pos++; const char *mon = pos; while( *mon != 0 && *mon != ' ' ) mon++; if ( *mon == 0 || (mon - pos) != 2) return false; target.m_day = atoi( pos ); mon++; pos = mon; while( *mon != 0 && *mon != ' ' ) mon++; if ( *mon == 0 || (mon - pos) != 3) return false; target.m_month = getRFC2822_Month( pos ); mon++; pos = mon; while( *mon != 0 && *mon != ' ' ) mon++; if ( *mon == 0 || (mon - pos) != 4) return false; target.m_year = atoi( pos ); mon++; pos = mon; while( *mon != 0 && *mon != ':' ) mon++; if ( *mon == 0 || (mon - pos) != 2 ) return false; target.m_hour = atoi( pos ); mon++; pos = mon; while( *mon != 0 && *mon != ':' ) mon++; if ( *mon == 0 || (mon - pos) != 2 ) return false; target.m_minute = atoi( pos ); mon++; pos = mon; while( *mon != 0 && *mon != ' ' ) mon++; if ( *mon == 0 || (mon - pos) != 2 ) return false; target.m_second = atoi( pos ); mon++; target.m_timezone = getRFC2822_Zone( mon ); if( target.m_timezone == tz_NONE ) return false; target.m_msec = 0; return target.isValid(); }