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

王朝other·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

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]='

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航