dateadd 函数跟VB的dateadd函数功能一样

来源:互联网  时间:2016/7/6 2:25:59

关于网友提出的“ dateadd 函数跟VB的dateadd函数功能一样”问题疑问,本网通过在网上对“ dateadd 函数跟VB的dateadd函数功能一样”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: dateadd 函数跟VB的dateadd函数功能一样
描述:

dateadd 函数跟VB的dateadd函数功能一样


解决方案1:

char   *   DateAdd(const   char   *   strdate,int   i,char   diff[]) 
strdate是日期也可以是不完整的日期,例如20070813。 
i表示相差的间隔数可以是负数。 
diff是区分, 'y '表示年, 'm '表示月,d '-表示天, 'w '表示周。 
例如   DateAdd(“20070816”,-5,‘m’)返回20070316*/ 
#include  
//每个月的天数 
int   day_perMonth[13]   =   {0,31,28,31,30,31,30,31,31,30,31,30,31}; 
char   rst[9];   //返回结果 
//判断是否为闰年 
int   check_year(int   year) 

if(year   %   400   ==   0) 

return   1; 

else   if(year   %   100   ==   0) 

return   0; 

else   if(   year   %   4   ==   0) 

return   1; 

else 

return   0; 


char   *   DateAdd(const   char   *   strdate,int   i,   char   diff) 

int   year; 
int   month; 
int   day; 
int   t1,t2; 
//char   rst[9]; 
//处理strdate,初始化year,month,day,前四个字符是year,接着两个是month,再接着是day 
year   =   (strdate[0]   -   0x30)   *   1000   +   (strdate[1]   -   0x30)   *   100   +   (strdate[2]   -   0x30)   *   10   +   (strdate[3]   -   0x30); 
month   =   (strdate[4]   -   0x30)   *   10   +   (strdate[5]   -   0x30); 
day   =   (strdate[6]   -   0x30)   *   10   +   (strdate[7]   -   0x30); 
//diff是区分, 'y '表示年, 'm '表示月,d '-表示天, 'w '表示周。 
//对于 'y ',直接处理 
//对于 'm ',转化成几年几个月 
//对于 'w ',转化成 'd ' 
//主要难度是对 'd '的处理,每个月天数不等,还要考虑到闰年 
if(   diff   ==   'y ') 

year   +=   i; 

else   if(   diff   ==   'm ') 

if(   i   <   0) 

i   =   0   -   i; 
t1   =   i   /   12; 
t2   =   i   %   12; 
year   -=     t1; 
month   -=   t2; 
if(month   <=   0) 

year--; 
month   +=   12; 


if(i   >   0) 

t1   =   i   /   12; 
t2   =   i   %   12; 
year   +=   t1; 
month   +=   t2; 
if(   month   >   12) 

year++; 
month   -=   12; 



else   if(   diff   ==   'w '   | |   diff   ==   'd ') 

if(diff   ==   'w ') 

i   *=   7;       //转换为 'd ' 

if(   i   <   0) 

i   =   0   -   i; 
while(1) 

if(day   >   i) 

day   -=   i; 
break; 

else 

i   -=   day; 
month--; 
if(month   ==   0) 

year   --; 
month   =   12; 

if(check_year(year)   &&   month   ==   2) 

day   =   day_perMonth[month]   +   1; 

else 

day   =   day_perMonth[month]; 




else 

while(1) 

if(check_year(year)   &&   month   ==   2) 

t1   =   day_perMonth[month]   +   1; 

else 

t1   =   day_perMonth[month]; 

if(t1   -   day   > =   i) 

day   =   day   +   i; 
break; 

else 

i   -=   (t1   -   day); 
day   =   0; 
month   ++; 
if(month   >   12) 

month   -=   12; 
year++; 





else 

printf( "erro "); 

rst[0]   =   year   /   1000   +   0x30; 
rst[1]   =   (year%1000)   /   100   +   0x30; 
rst[2]   =   (year%100)   /   10   +   0x30; 
rst[3]   =   year   %   10   +   0x30; 
rst[4]   =   month   /   10   +   0x30; 
rst[5]   =   month   %   10   +   0x30; 
rst[6]   =   day   /   10   +   0x30; 
rst[7]   =   day   %   10   +   0x30; 
rst[8]   =   '\0 '; 
return   rst; 

int   main() 

char   date[9]   =   "20070814 "; 
char*   rst   =   DateAdd(date,-100, 'd '); 
printf( "the   result   is   %s ",rst); 
return   0; 

上一篇C语言关于scanf的小问题,望高人指点
下一篇简单问题,速度揭帖
明星图片
相关文章
《 dateadd 函数跟VB的dateadd函数功能一样》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)