数学建模社区-数学中国

标题: 关于月份相加的算法! [打印本页]

作者: xShandow    时间: 2004-11-28 12:54
标题: 关于月份相加的算法!
<>月份相加,把我弄糊涂了.哪位大侠给解释一下.该如何加,才是最标准的?或是有思路就好.</P>
作者: ilikenba    时间: 2004-12-2 15:47
<>你所指的月份相加是不是要求出两个月相加后一共有多少天?</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>
作者: 无名    时间: 2004-12-2 20:26
//计算月末日期
5 P- u, ]( h) H0 }4 d) ^CString CalcDate(const CString &amp; csOldDate, int nMonthInc)
% w( }: U. `3 `{! T: j7 J. T' \, E% F
int nYear = atoi(csOldDate.Left(4));0 J; U0 X& @  o3 _$ l) m: Q0 n
int nMonth = atoi(csOldDate.Mid(4, 2));' D0 ~9 H! T' V- d2 K4 F
int nMonthTmp = nMonth + nMonthInc;                                //十进制的月
: `& D1 V9 I" r! F2 z9 s nMonth = (nMonthTmp + 11) % 12 + 1;                                //十二进制的月. }" g: I) e+ S' n" W
nYear += (nMonthTmp - nMonth) / 12;                                //年进(借)位
1 l2 _3 Y$ E& S2 b0 Z0 D, Z3 D! v int nDay;
0 a' J9 w9 ]& a! w+ z switch(nMonth)9 g, {! e2 G# K
{- a: P3 [, d0 T" c8 ]- p& D
case 2:
- i: E% o: q, U9 O  if((nYear % 400 == 0) || (nYear % 4 == 0 &amp;&amp; nYear % 100 != 0)) //闰年
" V( _# o8 G. q; X9 G7 S. N2 t  {1 X0 }. R9 [" M2 l) W0 \5 j; C
   nDay = 29;$ \+ \( z. s) v  f9 ]3 x
  }9 C5 r; G) d$ N4 d
  else* F4 m3 L0 |4 f4 J' c1 L/ n( Q' y1 D
  {5 \9 T" S) {6 h# u# D, O. g
   nDay = 28;) b1 j4 L4 ^* n6 g% v! q
  }) d3 S* _# e" b+ H: Y  c6 j# o. l6 A& c
  break;
# q7 k3 x* }# q% s8 t) r6 G# ] case 4:case 6:case 9:case 11:
% @  e  w  ]$ |. {0 A  H1 h( {$ v  nDay = 30;
7 e; x/ u$ m# D+ w. W( C  break;% I+ m8 n4 G5 N
default:; B# i- z/ _7 T: }1 a
  nDay = 31;
- f+ p+ B2 w* O( g5 i  break;
2 ^  l. p+ m$ @; m. r1 g! F }
& y' D) l3 _5 U2 b# n/ | CString csNewDate;
* ~8 X$ F, w- k& R csNewDate.Format("%04d%02d%02d", nYear, nMonth, nDay);
9 B8 r# g9 D+ p, \ return csNewDate;
0 n, F2 `: d5 g( W! c}
作者: xShandow    时间: 2004-12-3 09:36
<>谢谢无名.</P><>我的算法和你又不一样.* F6 W# r2 [0 K/ g2 D
我是按加的月数,循环加的., i+ `( _+ ], q, [9 z/ H$ M
每加一次判断:当前天是否大于当前月的天数,大于的话,当前天-当前月的天数,月数再加,如果月数大于12,月数=1,年数加1
" D. e6 V. \; [) e+ A& F每减一次判断:当前月是否小于1,小于,月数=12,年数减1,判断当前天数,当前天数是否大于当前月,是的,...就这样,反正就是烦,我也不知道这种算法是否科学.还请多讨论一下.嘿嘿!</P>
作者: ilikenba    时间: 2004-12-3 09:59
<>在C++Builder里面对于日期型已经重载了+,-的运算符了!可以直接用的!</P>
作者: xShandow    时间: 2004-12-3 14:43
关键是不能用VCL来作,这样一来,代码不对自己透明了.不知道能不能看到VCL的源码.
作者: GraBUAA    时间: 2012-4-2 19:31
帮顶一下~~~~~~




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5