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;
}