示例#1
0
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();
}