xShandow 发表于 2004-11-28 12:54

关于月份相加的算法!

<P>月份相加,把我弄糊涂了.哪位大侠给解释一下.该如何加,才是最标准的?或是有思路就好.</P>

xShandow 发表于 2004-12-3 14:43

关键是不能用VCL来作,这样一来,代码不对自己透明了.不知道能不能看到VCL的源码.

ilikenba 发表于 2004-12-2 15:47

<P>你所指的月份相加是不是要求出两个月相加后一共有多少天?</P>

xShandow 发表于 2004-12-2 17:57

不是的,比如说现在是2004年2月29,我加几个月让他变为2005年2月份,由于2005年2月份是28天,那么这多余的一天如何计算,还有每加一个月,如何计算。。比如说。今天是1月31,我加一个月,那么结果又如何算,因为2月最大也就29天。。这个问题很困扰我啊。

ilikenba 发表于 2004-12-2 18:06

<P>那还是要加上天数吧?如果是加上几个月,因为月的天数都不同,怎样区分呢?</P>

无名 发表于 2004-12-2 20:26

//计算月末日期
CString CalcDate(const CString &amp; 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 &amp;&amp; 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;
}

xShandow 发表于 2004-12-3 09:36

<P>谢谢无名.</P><P>我的算法和你又不一样.
我是按加的月数,循环加的.
每加一次判断:当前天是否大于当前月的天数,大于的话,当前天-当前月的天数,月数再加,如果月数大于12,月数=1,年数加1
每减一次判断:当前月是否小于1,小于,月数=12,年数减1,判断当前天数,当前天数是否大于当前月,是的,...就这样,反正就是烦,我也不知道这种算法是否科学.还请多讨论一下.嘿嘿!</P>

ilikenba 发表于 2004-12-3 09:59

<P>在C++Builder里面对于日期型已经重载了+,-的运算符了!可以直接用的!</P>

GraBUAA 发表于 2012-4-2 19:31

帮顶一下~~~~~~
页: [1]
查看完整版本: 关于月份相加的算法!