您的位置:首页 > 编程语言 > C语言/C++

C语言简单的日期校验函数

2011-04-08 20:06 260 查看
int VALIDATION_isDate(char *source)

{

//puts("日期为2011--2999年 格式为YYYY.MM.DD,YYYY-MM-DD,YYYY/MM/DD");

int Idatelen=strlen(source);

char cyear[4];

char cmonth[2];

char cdata[2];

int iyear;

int imonth;

int idata;

if (VALIDATION_isEmpty(source)==SUCCESS) //首先判读是否输入存在空格

{

printf(" 输入不能为空\n");

return FAILURE;

}

if (Idatelen!=10) //判读是否按要求的长度

{

printf(" 长度不为10\n");

return FAILURE;

}

if (strchr("-./",*(source+4))==NULL || strchr("-./",*(source+7))==NULL) //判读第五位,第八位是否是.-/三种格式

{

return FAILURE;

}

if (*(source+4)!=*(source+7))

{

return FAILURE;

}

//char *strncpy(char *dest, const char *src,int count)

strncpy(cyear,source,4);

cyear[4]='\0';

strncpy(cmonth,source+5,2);

cmonth[2]='\0';

strncpy(cdata,source+8,2);

cdata[2]='\0';

if (VALIDATION_isNumeric(cyear) && VALIDATION_isNumeric(cmonth) && VALIDATION_isNumeric(cdata) )

{

iyear=atoi(cyear);

imonth=atoi(cmonth);

idata=atoi(cdata);

// int arr1[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; /* 平年调用这个数组 */

//int arr2[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; /* 闰年调用这个数组 */

if ((iyear>=2000 && iyear<3000) && (imonth>=1 && imonth<=12 ) && (idata>=1 && idata <=31)) //判断日期是否在合法的范围内

{

switch (imonth)

{

case 4:

case 6:

case 9:

case 11:

if (idata>30) //如果是4.6.9.11 判断天数是否大于30

{

puts("4,6,9月份天数不能大于30天,请重新输入");

return FAILURE;

}

break;

case 2:

if ((iyear % 4== 0 && iyear%100 != 0) || (iyear % 400 == 0)) //用于判断是否为闰年

{

if (idata>29) //如果是,2月将不能大于29天

{

puts("闰年二月份天数不能大于29,请重新输入");

return FAILURE;

}

}

else

{

if (idata >28) //如果不是,2月将不能大于28天

{

puts("二月份天数不能大于28,请重新输入");

return FAILURE;

}

}

break;

default:

break;

} /*end of switch*/

}

else

{

puts("年或月或日,不在合法范围内");

return FAILURE;

}

return SUCCESS;

}/*end of if(VALIDATION_isNumeric)*/

puts("日期不为数字");

return FAILURE;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息