关于网友提出的“ 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;
}