数学建模社区-数学中国

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

作者: 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
//计算月末日期
+ x2 r% z$ ]; p6 JCString CalcDate(const CString &amp; csOldDate, int nMonthInc), n, k5 G2 ]0 S
{
( p5 g' v4 r% w8 |) T6 j int nYear = atoi(csOldDate.Left(4));, n9 @' a5 e& w7 \
int nMonth = atoi(csOldDate.Mid(4, 2));
) k* Q0 X$ V& ~0 ~) T2 V int nMonthTmp = nMonth + nMonthInc;                                //十进制的月
  \- K) K8 s: W4 R2 p- f& v0 w; Z nMonth = (nMonthTmp + 11) % 12 + 1;                                //十二进制的月5 w" y; Z) F/ i' {& f) l  ?
nYear += (nMonthTmp - nMonth) / 12;                                //年进(借)位( m, Q5 t; I! b1 R# N4 \0 |, ~
int nDay;
" M( n0 O$ D- a) b switch(nMonth)
. f5 }! p8 ?' D- ] {7 j% s3 x& w! R: D' M& p+ y
case 2:+ A; D# v( E+ `; c2 i$ X
  if((nYear % 400 == 0) || (nYear % 4 == 0 &amp;&amp; nYear % 100 != 0)) //闰年/ Y7 I* m' ?4 T, |, n; l/ x
  {+ s. x- e) r, u: s( Z
   nDay = 29;
$ P# y  E; y" |- I  }
4 }+ M1 X- s2 f3 L4 ?( v  else- z% \2 j- P: h
  {2 a, z' }' C0 G# Y
   nDay = 28;5 }: s7 e6 B" }
  }& G6 Y# f8 T/ w# r: F: X
  break;  v+ Q7 m5 j; L
case 4:case 6:case 9:case 11:
) U* u$ T" `( ^4 ^. w  nDay = 30;
5 h( H, a0 |+ I. [% C. _( O' S: `  break;7 m$ E( g, k2 Q2 v& p: I# N4 b
default:% q: I1 |8 h  ~$ h6 {' m6 _
  nDay = 31;
* e, r; C! B- e) a% k7 w6 m# b7 {+ }  break;4 _3 l( |( C1 F* X7 Z' j
}
1 N. w6 M' Y3 o/ [- t! n1 J$ H- |' g& x CString csNewDate;# I1 Y3 ~7 _( M8 G- u
csNewDate.Format("%04d%02d%02d", nYear, nMonth, nDay);
) w& P0 |. a6 z1 B( U return csNewDate;5 F; d# F0 A2 ^) e3 U5 ^
}
作者: xShandow    时间: 2004-12-3 09:36
<>谢谢无名.</P><>我的算法和你又不一样.6 S6 F7 q  T3 j* {0 g
我是按加的月数,循环加的.
! B! A0 ^& P8 d% D每加一次判断:当前天是否大于当前月的天数,大于的话,当前天-当前月的天数,月数再加,如果月数大于12,月数=1,年数加11 m$ F" F  v' s0 {( p
每减一次判断:当前月是否小于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