关于月份相加的算法!
<P>月份相加,把我弄糊涂了.哪位大侠给解释一下.该如何加,才是最标准的?或是有思路就好.</P> 关键是不能用VCL来作,这样一来,代码不对自己透明了.不知道能不能看到VCL的源码. <P>你所指的月份相加是不是要求出两个月相加后一共有多少天?</P> 不是的,比如说现在是2004年2月29,我加几个月让他变为2005年2月份,由于2005年2月份是28天,那么这多余的一天如何计算,还有每加一个月,如何计算。。比如说。今天是1月31,我加一个月,那么结果又如何算,因为2月最大也就29天。。这个问题很困扰我啊。 <P>那还是要加上天数吧?如果是加上几个月,因为月的天数都不同,怎样区分呢?</P> //计算月末日期CString CalcDate(const CString & csOldDate, int nMonthInc)
{
int nYear = atoi(csOldDate.Left(4));
int nMonth = atoi(csOldDate.Mid(4, 2));
int nMonthTmp = nMonth + nMonthInc; //十进制的月
nMonth = (nMonthTmp + 11) % 12 + 1; //十二进制的月
nYear += (nMonthTmp - nMonth) / 12; //年进(借)位
int nDay;
switch(nMonth)
{
case 2:
if((nYear % 400 == 0) || (nYear % 4 == 0 && nYear % 100 != 0)) //闰年
{
nDay = 29;
}
else
{
nDay = 28;
}
break;
case 4:case 6:case 9:case 11:
nDay = 30;
break;
default:
nDay = 31;
break;
}
CString csNewDate;
csNewDate.Format("%04d%02d%02d", nYear, nMonth, nDay);
return csNewDate;
} <P>谢谢无名.</P><P>我的算法和你又不一样.
我是按加的月数,循环加的.
每加一次判断:当前天是否大于当前月的天数,大于的话,当前天-当前月的天数,月数再加,如果月数大于12,月数=1,年数加1
每减一次判断:当前月是否小于1,小于,月数=12,年数减1,判断当前天数,当前天数是否大于当前月,是的,...就这样,反正就是烦,我也不知道这种算法是否科学.还请多讨论一下.嘿嘿!</P> <P>在C++Builder里面对于日期型已经重载了+,-的运算符了!可以直接用的!</P> 帮顶一下~~~~~~
页:
[1]