歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 如何用date獲得前一天的日期

如何用date獲得前一天的日期

日期:2017/2/27 9:22:49   编辑:更多Linux
  int date8_add(char *date8,char ymd,int value,char *date8added); int checkdate8(char *date8); long int days_from_8zeros(char *date8); int get_data8_from_days(long int days,char *date8); //功能:計算某年月日前後一定年數(或月數、天數)的年月日 //輸入: // 1. date8 計算基准日期 // 2. ymd 表示下一變量的單位 'y'-年 'm'-月 'd'-日 // 3. value 偏移量:年數、月數、天數 //輸出: // 1. date8added 計算後結果 //返回: // 0 成功 // -1 date8非法 // -2 ymd非法 // -3 value非法 // -4 轉換後date8added的年份小於公元1年 // -5 轉換後date8added的年份大於公元9999年 // -6 轉換後date8added非法,例如得到結果為2002/02/30 int date8_add(char *date8,char ymd,int value,char *date8added) { char strtmp[10]; long int days; int c,vyear,vmonth,vday; int errbz; // 檢查參數date8的合法性 errbz=checkdate8(date8); if (errbz!=0) return(-1); // 檢查參數ymd的合法性 if ( ymd!='y' && ymd!='m' && ymd!='d') return(-2); // 檢查參數value的合法性(簡單檢查) //if ( value < -9999 value > 9999 ) return(-3); // 當增加量為年數時,計算結果並返回 if (ymd=='y') { memset(strtmp,0,sizeof(strtmp)); memcpy(strtmp,date8+0,4); sscanf(strtmp,"%d",&vyear); vyear+=value; if ( vyear<1 ) return(-4); //小於公元1年 if ( vyear>9999 ) return(-5); //大於公元9999年 strcpy(date8added,date8); sprintf(strtmp,"%04d",vyear); memcpy(date8added,strtmp,4); errbz=checkdate8(date8added); if (errbz!=0) return(-6); //計算所得結果非法 return(0); } // 當增加量為月數時,計算結果並返回 if (ymd=='m') { vyear=0; vmonth=0; vday=0; memset(strtmp,0,sizeof(strtmp)); memcpy(strtmp,date8+0,4); sscanf(strtmp,"%d",&vyear); memset(strtmp,0,sizeof(strtmp)); memcpy(strtmp,date8+4,2); sscanf(strtmp,"%d",&vmonth); memset(strtmp,0,sizeof(strtmp)); memcpy(strtmp,date8+6,2); sscanf(strtmp,"%d",&vday); vmonth=vyear*12+vmonth+value; vmonth--; vyear=vmonth/12; vmonth=vmonth%12; vmonth++; if (vyear<1) return(-4); if (vyear>9999) return(-5); sprintf(date8added,"%04d%02d%02d",vyear,vmonth,vday); errbz=checkdate8(date8added); if (errbz!=0) return(-6); return(0); } // 當增加量為天數時,計算結果並返回 if (ymd=='d') { days=days_from_8zeros(date8); days+=value;


if (days<=366) return(-4); //年號為0000 if (days>3652425) return(-5); //年號超出9999 errbz=get_data8_from_days(days,date8added); if (errbz!=0) return(-1); return(0); } } //檢查日期YyyyMmdd //輸入:date8 日期字符串 //返回:0-正確 -1-錯誤 int checkdate8(char *date8) { int c; int errdate=0; char str_year[5]=""; char str_mon[3]=""; char str_day[3]=""; int int_year,int_mon,int_day; int leap_year; // 1-閏年 0-不是閏年 errdate=0; if ( strlen(date8) != 8 ) errdate=1; if (errdate!=1) { for (c=0;c<10;c++) { if (date8[c]==' ') errdate=1; } if ( date8[0] < '0' date8[0] > '9' ) errdate=1; if ( date8[1] < '0' date8[1] > '9' ) errdate=1; if ( date8[2] < '0' date8[2] > '9' ) errdate=1; if ( date8[3] < '0' date8[3] > '9' ) errdate=1; if ( date8[4] < '0' date8[4] > '9' ) errdate=1; if ( date8[5] < '0' date8[5] > '9' ) errdate=1; if ( date8[6] < '0' date8[6] > '9' ) errdate=1; if ( date8[7] < '0' date8[7] > '9' ) errdate=1; } if (errdate!=1) { str_year[0]=date8[0]; str_year[1]=date8[1]; str_year[2]=date8[2]; str_year[3]=date8[3]; str_year[4]='



if ( date8[4] < '0' date8[4] > '9' ) errdate=1; if ( date8[5] < '0' date8[5] > '9' ) errdate=1; if ( date8[6] < '0' date8[6] > '9' ) errdate=1; if ( date8[7] < '0' date8[7] > '9' ) errdate=1; } if (errdate!=1) { str_year[0]=date8[0]; str_year[1]=date8[1]; str_year[2]=date8[2]; str_year[3]=date8[3]; str_year[4]='



Copyright © Linux教程網 All Rights Reserved