校验日期合法性,

/****************************************************************************
 功能描述:      校验日期合法性,日期格式为:YYYYMMDD
****************************************************************************/
int CheckDate(char *sDate)
{
    int      y, m, d;
    char     chLeapFlag;
    char     szYear[5];
    char     szMonth[3];
    char     szDay[3];
    int      i;


    for(i=0; i<8; i++) 
    {
        if( sDate[i]<'0' || sDate[i]>'9' )
            return (1);
    }
    
    sprintf(szYear, "%.4s", sDate);
    sprintf(szMonth, "%.2s", sDate+4);
    sprintf(szDay, "%.2s", sDate+6);
    
    y = atoi(szYear);
    m = atoi(szMonth);
    d = atoi(szDay);

    if( m>12 || m<=0 )
        return (1);
    if( d>31 || d<=0 )
        return (1);
    if( (m==4 || m==6 || m==9 || m==11) && d==31 )
        return (1);
    
    if( m==2 ) 
    {
        chLeapFlag = 0;
        if( y%400==0 )
            chLeapFlag = 1;
        else if( y%4==0 && y%100 != 0)
            chLeapFlag = 1;
        if( chLeapFlag!=1 && d>28 )
            return (1);
        if( chLeapFlag==1 && d>29 )
            return (1);
    }
    
    return 0;
}
 

发布了20 篇原创文章 · 获赞 4 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/zhuimenglushang/article/details/82423315
今日推荐