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

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

你可能感兴趣的:(职场,C语言,校验,休闲,简单日期)